2013-02-13 4 views
10

Unterstützt eine der XML-Bibliotheken in NPM die Validierung von XML anhand eines XSD-Schemas?Validierung von XML gegen ein Schema (xsd) in NodeJS

Ich sehe mich würde, aber:

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

Hinweis: Die xsd Paket nicht das, was es scheint, und node-xerces ist gebrochen/leer.

+0

möglich Duplikat von [XML-Syntax validieren/Struktur mit node.js] (http://StackOverflow.com/Questions/11050759/validate-XML-Syntax-Struktur-mit-Node-Js) –

Antwort

16

Hij1nx (Paolo Fragomeni) wies mich auf https://github.com/polotek/libxmljs

Nach einer halben Stunde zu versuchen, die API, um herauszufinden, ich habe eine Lösung:

result0: true 
result1: false 
:

#!/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); 

Dadurch wird die Ausgabe erzeugt

Ich habe keine Ahnung, ob und wie das mit Schemas funktioniert, die über URIs auf andere Schemata verweisen.

+1

Ich habe das gefunden Diskussion zu Schemas mit Importen: https://github.com/libxmljs/libxmljs/issues/202 – iaforek