簡體   English   中英

獲取第一個節點的節點值

[英]Get the Node value for the first Node

我有以下 XML:

<?xml version='1.0' ?>
<foo>A&gt;B</foo>

並且只想將開始標記的節點值獲取為A&gt;B ,如果我們使用 getNodeValue ,它會將其轉換為不需要的 A>B 。

因此我決定使用 Transformer

        Document doc = getParsedDoc(abovexml);
        TransformerFactory tranFact = TransformerFactory.newInstance();
        Transformer transfor = tranFact.newTransformer();
        transfor.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        Source src = new DOMSource(node);
        StringWriter buffer = new StringWriter();
        Result dest = new StreamResult(buffer);
        transfor.transform(src, dest);
        String result = buffer.toString();

但這給出了以下 output 作為<foo>A&gt;B</foo>結果的一部分

如果有人能澄清一下,如果有一種方法可以讓我們在不從上述 output ( <foo>A&gt;B</foo> ) 中進行字符串操作的情況下獲得A&gt;B將很有幫助

由於 getNodeValue() 會自動解碼字符串。
您可以使用 Apache Commons Lang 中的 StringEscapeUtils 再次對其進行編碼。

http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringEscapeUtils.html
http://commons.apache.org/lang/

String nodeValue = StringEscapeUtils.escapeHtml(getNodeValue());

這會將其編碼為您希望它采用的格式。它對性能不是很友好,因為您正在為每個節點值應用編碼。

實際上 getNodeValue() 不是“轉換”字符串。 當從文件中解析 XML 或通過轉換生成時,得到的信息 model 是字符串A>B ,而不是A&gt;B 后者只是一種序列化形式。

另一種合法的序列化形式是A>B (因為在大多數情況下不需要轉義右尖括號)。 但是,想要生產A&gt;B可能存在兼容性原因,特別是如果您的 output 打算成為 HTML (盡管您沒有提到)。

如果您對 escaping 有充分的理由> ,那么我同意@kensen john 的回答。

暫無
暫無

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

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