JavaScriptで文字列がwell-formedなXMLかチェックしたい
やりたいこととして、http://mizchi.github.io/md2react/ で、markdownのHTML直接入力の記法で、壊れたHTMLを入力した際に検出して警告を出そうとしていました。
最初は次のリンクを参考に、下のようなコードを書きました
Check for XML errors using JavaScript - Stack Overflow
parser = new DOMParser()
checkValidXML = (xmlString) ->
parsererrorNS = parser.parseFromString('INVALID', 'text/xml').getElementsByTagName("parsererror")[0].namespaceURI
dom = parser.parseFromString(xmlString, 'text/xml')
if dom.getElementsByTagNameNS(parsererrorNS, 'parsererror').length > 0
throw new Error('Error parsing XML')
return dom;
ただ、この場合は <a>foo</a>
や <span>aaa</span>
を誤検出してしまいます。本当に検知したいのは<a>foo</
のような中途半端な文字列です。
divやpreは通ります。(現状のmd2reactの実装では、少しでも安全側に寄せて誤検出を許容しています)
この実装もDOMParserに依存しているので、nodeでも動くようにできればピュアなJSの実装で、正しく壊れたHTML(XML)を検出したいのですが、より良い方法や、既存実装があったりしませんでしょうか。