はありまJava XML APIできる構文書の解決なくして文字主体?
-
21-09-2019 - |
質問
しているプログラムのニーズの解析を格納したXML文字ます。のプログラム自体は必要ありませんし、解決のリストは大きく変化していきたいなと思っています避ける明示的な支援のためのこれらの団体があります。
こちらは簡単な例:
<?xml version="1.0" encoding="UTF-8"?>
<xml>Hello there &something;</xml>
はありまJava XML APIできる文書を構文解析し解決せずに非標準文字主体?理想的で翻訳して特別なイベントやオブジェクトが扱う特別な思決のためのオプションが黙って抑制します。
解答&例:
Skaffmanわたり回答:使用StAXパーザ IS_REPLACING_ENTITY_REFERENCES
[false]に設定されています。
こちらのコード私を徹底的にやりましょう:
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);
XMLEventReader reader = inputFactory.createXMLEventReader(
new FileInputStream("your file here"));
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if (event.isEntityReference()) {
EntityReference ref = (EntityReference) event;
System.out.println("Entity Reference: " + ref.getName());
}
}
上記のXMLで印刷"Entity Reference: something
".
解決
のSTaXインターコネクション支援のための概念を交換しな文字実体参照することによって、 IS_REPLACING_ENTITY_REFERENCES 物件:
しを要求するパーサを交換 内部実体参照を 置換テキストおよび報告書として 文字
この設定ができ、 XmlInputFactory
, し、その利用を XmlEventReader
または XmlStreamReader
.しかし、このAPIできるよう配慮されているとのことでプライベート重視の方にお勧め 力 の実施もしくは付け替えを行よりも強し ない 置き換えます。まだまったり、試してみる価値がある。
他のヒント
A SAX解析 ORG有します。 xml.sax.EntityResolver には、あなたの目的に合うかもしれません。あなたは確か抑制彼らのために可能性があり、あなたはおそらく、未解決のそれらを残すための方法を見つけることができます。
この<のhref = "https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-22_11-5075716.html?tag=mantle_skin" のrel =」 nofollowをnoreferrer ">チュートリアルの最も関連性の高いようだ:それは文字列にどのように解決エンティティに示しています。
私は、Java開発者ではないが、私は、Java、XMLクラスはこれを達成するための.NETと同様の機能をサポートする「考えます」。 .NET xmlreadersettingsクラスでは、ProhibitDtdプロパティはfalseを設定し、nullにXmlResolverのプロパティを設定します。これは、パーサーは、それらが読み込まれたときに例外がスローされることなく、外部参照エンティティを無視するようになります。私はちょうど「Javaがenityを無視する」ためのGoogle検索を行なったし、このトピックに対処するように見えるそのうちのいくつかのヒットの多くを、得ました。私は、これはあなたの質問への総答えではない実現するが、それは有益な方向にあなたを指している必要があります。
私の作品外部エンティティのサポートを無効にするだけます:
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);
inputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);