2017-01-27 7 views
3

は、私はそれで&を持つXML文書を持っているので、私は、私は、不正なXML文字エスケープする機能を書いたエラーNode xml2jsモジュールを使用して文字をエスケープするにはどうすればよいですか?

[Error: Invalid character in entity name 
    Line: 155 
    Column: 63 
    Char: ] 

を取得しています:

const escapeIllegalCharacters = (xml) => { 
    xml = xml 
    .replace(/&/g,'&') 
    .replace(/"/g, '"') 
    .replace(/'/g, ''') 
    .replace(/>/g, '>') 
    .replace(/</g, '&lt;'); 
    return (xml); 
} 

をそしてvalueProcessorにそれを置きます:

return parse.parseString(xml, {valueProcessors: [escapeIllegalCharacters]}); 

でも、私はまだ同じエラーが発生しています。これは、xml2jsモジュールを使用して文字をエスケープする方法が間違っていますか?

答えて

3

parseStringを呼び出す前にアンパサンドをエスケープする必要があります。

あなたは自身がエスパス・シーケンスの一部ではないアンパサンドを逃れるためにthis answerから正規表現を使用することができます。

return parse.parseString(
    xml.replace(/&(?!(?:apos|quot|[gl]t|amp);|#)/g, '&amp;') 
); 

これはあなたの問題はあなたのXMLの内容に依存する解決するかどうか。たとえば、この単純化されたメカニズムは、CDATAセクションのアンパサンドもエスケープしますが、これらのセクションのアンパサンドはエスケープされません。

+0

返信いただきありがとうございます!だから、私は実際にparseStringを呼び出す前にエスケープ関数を実行しようとしましたが、xml文字の開始タグと終了タグをエスケープしていたところで問題が発生しました。私はあなたの上記のソリューションはアンパサンドのために動作すると思うが、タグ間だけのすべての不正な文字をエスケープするための一般的な解決策はありますか?私はvalueProcessorsソリューションがそれだと思った... – user1023465

+0

結論は、あなたのXMLが無効であり、パーサーがそれを受け入れないということです。おそらくもっと寛容な別のものがあるでしょうか?もしそこに '<' and '> '文字をエスケープしていなければ、本当の問題があります。パーサーは、何かがタグなのかどうかを判断する方法を必要とします。したがって、常にあいまいさがあり、一般的な解決策はありません。 – cartant

+0

ええ、公正な点、私はあなたの答えをチェックし、それはアンパサンドのために働く、私はそれを正しくマークするつもりです。ありがとう! – user1023465

関連する問題