

やりたいこととして、<http://mizchi.github.io/md2react/>
で、markdownのHTML直接入力の記法で、壊れたHTMLを入力した際に検出して警告を出そうとしていました。

最初は次のリンクを参考に、下のようなコードを書きました  
[Check for XML errors using JavaScript - Stack
Overflow](https://stackoverflow.com/questions/6334119/check-for-xml-errors-
using-javascript "Check for XML errors using JavaScript - Stack Overflow")

[code]

    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;
    
[/code]

ただ、この場合は `<a>foo</a>` や `<span>aaa</span>` を誤検出してしまいます。本当に検知したいのは`<a>foo</`
のような中途半端な文字列です。

divやpreは通ります。(現状のmd2reactの実装では、少しでも安全側に寄せて誤検出を許容しています)

この実装もDOMParserに依存しているので、nodeでも動くようにできればピュアなJSの実装で、正しく壊れたHTML(XML)を検出したいのですが、より良い方法や、既存実装があったりしませんでしょうか。


CC BY-SA 3.0
2015-03-23T03:06:58.977
8244
2015-07-21T07:43:56.387
2017-05-23T12:38:55.250
-1
2674
question
javascript
JavaScriptで文字列がwell-formedなXMLかチェックしたい


isInvalidXML関数が`"<a>"`と`"</a>"`とで、二回実行されているようです。

consoleから直接、isInvalidXML関数に対して文字列`"<a>foo</a>"`を送ると、  
問題なく結果が返ってくるようなので、  
問題はisInvalidXMLが呼ばれる以前にあるのではないかと思われます。

あまり深く追ってはいませんが、compile関数のnode.valueの時点で既に`"<a>"`だけになっているようですね。


CC BY-SA 3.0
2015-03-23T05:48:42.233
8255
2015-03-23T06:00:47.027
2015-03-23T06:00:47.027
8305
8305
8244
answer