Node.js-XML验证

问题描述

如何在node.js中验证xml?我主要对仅检查文件是否格式正确感兴趣。另外,我想收到发生错误的行号。

我有以下测试xml:

<?xml version="1.0" encoding="UTF-8" ?>
<body>
    <tagname>
        test1
    </tag.name>   <--- error here
    <tagname>
        test2
    </tagname>
</body>

到目前为止,我已经尝试过:

xmldom:

var parser = new DOMParser({errorHandler: (level,error) => {
    console.log (level,error);
}});
var dom = parser.parseFromString(content,'application/xml');

问题:没有错误指示。永远不会调用错误处理程序,并且dom包含“ test1”,但不包含“ test2”。因此解析器只是停止并吞没了错误

libxmljs:

var xmlDoc = libxmljs.parseXml(xml);

问题:抛出非描述性异常“标签主体中的数据过早结束”。

解决方法

我们最近也必须使用NodeJS进行xml解析,最终使用fast-xml-parser,到目前为止,我们对此感到非常满意。应用于您的案例,您可以使用.validate(..)方法:

const xmlString = `<?xml version="1.0" encoding="UTF-8" ?>
<body>
    <tagname>
        test1
    </tag.name>   <--- error here
    <tagname>
        test2
    </tagname>
</body>`;

const parser = require('fast-xml-parser');

const validationResult = parser.validate(xmlString);
console.log(validationResult)

// validationResult will be an object of:
{
  err: {
    code: 'InvalidTag',msg: "Closing tag 'tagname' is expected inplace of 'tag.name'.",line: 5
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...