簡體   English   中英

使用XMLStreamReader讀取轉義字符

[英]Reading escape characters with XMLStreamReader

嗨,我在使用XMLStreamReader讀取xml內的轉義字符時遇到問題。

例如我有這個元素:

<a>foo&amp;bar</a>

當我讀取該值時, &amp;之后的所有內容 被截斷,並且我得到的值是“ foo”

有什么想法可以解決嗎?

要強制XMLStreamReader返回單個字符串,必須設置XMLStreamReader#next()文檔指示的javax.xml.stream.isCoalescing屬性:

XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty("javax.xml.stream.isCoalescing", true);  // decode entities into one string
XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(stringReader);

我不確定是什么問題-我的測試會產生您期望的結果。

跑步

XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader reader = xmlInputFactory.createXMLStreamReader(
     new StringReader("<tag>foo&amp;bar</tag>"));
PrintWriter pw = new PrintWriter(System.out, true);
while (reader.hasNext())
{
    reader.next();
    pw.print(reader.getEventType());
    if (reader.hasText())
        pw.append(' ').append(reader.getText());
    pw.println();
}

產生

1
4 foo
4 &
4 bar
2
8

在JDK 1.6.0.11上-我知道比較舊。 如果結果不同,我將升級並發回。

要記住的一件事是XMLStreamReader可以(並且確實可以!)將字符數據分成幾個塊,如您在上面看到的-重復的4個事件(4 = CHARACTERS)表示元素的文本作為3個事件發送。

讀取字符串后,是否有任何方法可以保留&在下一個輸出中? 喜歡:

1
4 foo&amp;bar
2
8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM