Проверка XML в отношении схемы (xsd) в NodeJS Поддерживает ли какая-либо из XML-библиотек в NPM проверку XML на XSD-схему? Я бы посмотрел сам, но: $ npm search xml 2>/dev/null | wc -l 212 Примечание: пакет xsd не является тем, что кажется, и node-xerces разбит/пуст. Ответ 1 Hij1nx (Паоло Фрагомени) указал мне на 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.
Ответ 1 Hij1nx (Паоло Фрагомени) указал мне на 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.