根据 NodeJS 中的架构 (xsd) 验证 XML

问题描述 投票:0回答:2

NPM 中的任何 XML 库是否支持根据 XSD 架构验证 XML?

我会审视自己,但是:

$ npm search xml 2>/dev/null | wc -l
212

注意:

xsd
包裹并不像看起来那样,并且
node-xerces
已损坏/空了。

xml node.js xsd xml-validation
2个回答
33
投票

Hij1nx (Paolo Fragomeni) 向我指出 https://github.com/polotek/libxmljs

经过半个小时的尝试找出 API,我有了一个解决方案:

#!/usr/local/bin/node
var x = require('libxmljs');

var xsd = '<?xml version="1.0" encoding="utf-8" ?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://example.com/XMLSchema/1.0" targetNamespace="http://example.com/XMLSchema/1.0" elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:element name="foo"></xs:element></xs:schema>'
var xsdDoc = x.parseXmlString(xsd);

var xml0 = '<?xml version="1.0" encoding="UTF-8"?><foo xmlns="http://example.com/XMLSchema/1.0"></foo>';
var xmlDoc0 = x.parseXmlString(xml0);
var xml1 = '<?xml version="1.0" encoding="UTF-8"?><bar xmlns="http://example.com/XMLSchema/1.0"></bar>';
var xmlDoc1 = x.parseXmlString(xml1);

var result0 = xmlDoc0.validate(xsdDoc);
console.log("result0:", result0);

var result1 = xmlDoc1.validate(xsdDoc);
console.log("result1:", result1);

这会产生输出:

result0: true
result1: false

我不知道这是否/如何与通过 URI 引用其他架构的架构一起使用。


0
投票

我找到了一种使用 xmllint linux 命令的方法,我遇到的唯一问题是它是否验证它返回到 stderr。但这种方法似乎适用于多文件 xsd。

执行(

echo '${xml}' | xmllint  --schema  ./xml/xsd.xsd /dev/stdin --noout
, (错误,标准输出,标准错误)=> { );

© www.soinside.com 2019 - 2024. All rights reserved.