2011-08-12 7 views
0

ドキュメントビルダファクトリ でXMLファイルを変更することを自動化していますが、属性エンティティ参照'のいずれかが'に変更されています。私はその変化が起こることを望んでいません。'エンティティを 'XMLファイルに変更したくない

docBuilderFactory.setValidating(false); 
docBuilderFactory.setExpandEntityReferences(false); 

が、何も

+1

[this](http://stackoverflow.com/questions/5181704/documentbuilder-parsing-breaks-string-when-hits-amp)は役に立ちますか? – Vlad

+0

私はnormalize ....とattr.getNamedItem(somenode).getTextContent()を実行しようとしましたが、同じ問題がまだあります –

答えて

1

これはハックの詳細です(これはJavaScriptで生のJavaScriptの文字列を書き出すと\'に戻ってアポストロフィを変換することに似ている)、しかし、あなたが処理する前にそれを逃れることができます。

myXmlString = myXmlString.replaceAll("'", "'"). 

プロセッサは、''に展開します。

+0

私はこれを考えている...しかし、問題は私がattr.getNamedItem(someNode).getNodeValue()を使用していることです。これは私に '単純なものを認識できないように'変更しました。または' –

0

本当の問題は'にアポストロフィをエスケープする方法は単にであることで動作しているようです。これは、JavaScriptの文字列を読み取る場合と同じです。'\''データが文字列として解釈されると、エスケープされた文字(XMLのエンティティ)がパーサーによって展開されます。つまり、生の文字から基本的にこの解釈が含まれており、その周囲に良い方法はありません。

実際の問題は、変換後の有効なXMLの出力です。この問題は、元の入力文字列が解析され、エンティティがアポストロフィに展開されていることにあります。幸いにもこれは簡単な修正です。特定の属性にアポストロフィが含まれていることがわかっている場合は、出力ステップをコード化して&を置き換えます。''に変換されます。

+0

問題は私がDocumentBuilderを使用していることです。docBuilder = docBuilderFactory.newDocumentBuilder();ドキュメントdoc = docBuilder.parse(新しいファイル( "book.xml"));そして、私は任意のノードまたは属性のstringContentを取る私は、文字列コンテンツを取得していない私は解析されたコンテンツを取得しています...もし何とか私は文字列の内容を取得し、私はそれを利用することができます –

関連する問題