2012-06-15 17 views

Odpowiedz

0

UPDATE odpowiedź

Zobacz conrad10781 użytkownika. Ta odpowiedź jest nieaktualna, ponieważ oryginalna strona Wiki, z którą się łączyłem, została zarchiwizowana, chociaż wskazała, które moduły umożliwiły sprawdzenie zarówno składni, jak i schematu.

OUTDATED INFO

Istnieje mnóstwo parserów XML dostępne poprzez npm.

Natywne implementacje (takie jak węzeł-ekspat) wymagają zbudowania rozszerzenia C++, aby złamać wymóg działania modułu zarówno w systemach Windows, jak i Linux, ale ze względu na szybkość, jaką zapewniają, należy je wypróbować mimo to , zwłaszcza jeśli masz do czynienia z dużymi plikami XML.

xmldom powinien być w stanie zapewnić bardzo proste przetwarzanie XML z łańcuchów. Następnie możesz utworzyć funkcję, która po prostu zwróci true/false w zależności od wyniku analizy (sprawdź, jak zwracają błędy).

+0

pierwsze ogniwo do modułów analizatora składni XML jest teraz uszkodzony. – spoulson

+0

@spoulson dzięki za zwrócenie mi tej uwagi. Rozwiązany, aby wskazywać bezpośrednio na stronę npm. –

8

Wiem, że to starszy post, ale natknąłem się na niego i niestety odpowiedź Ankit nie była dla mnie bardzo pomocna. W najlepszym przypadku skupiono się na tym, czy dane wejściowe są poprawną składnią XML, a nie czy są zgodne ze schematem, który był częścią OP.

Znalazłem libxmljs jako najlepsze rozwiązanie dla tego, czego szukasz. Można parsować, sprawdzać poprawność podstawowego łańcucha, a także szczegółową strukturę.

Przykładem sprawdzanie składni XML byłoby coś jak:

program.isValidSyntaxStructure = function (text) { 
    try { 
     libxmljs.parseXml(text); 
    } catch (e) { 
     return false; 
    } 

    return true; 
}; 

Przykładem sprawdzenie konkretnej struktury/schematu byłoby coś jak:

var xsd = '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="comment" type="xs:string"/></xs:schema>'; 
var xml_valid = '<?xml version="1.0"?><comment>A comment</comment>'; 
var xml_invalid = '<?xml version="1.0"?><commentt>A comment</commentt>'; 

var xsdDoc = libxml.parseXml(xsd); 
var xmlDocValid = libxml.parseXml(xml_valid); 
var xmlDocInvalid = libxml.parseXml(xml_invalid); 

assert.equal(xmlDocValid.validate(xsdDoc), true); 
assert.equal(xmlDocInvalid.validate(xsdDoc), false);