[英]Get the Node value for the first Node
我有以下 XML:
<?xml version='1.0' ?>
<foo>A>B</foo>
並且只想將開始標記的節點值獲取為A>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>B</foo>
結果的一部分
如果有人能澄清一下,如果有一種方法可以讓我們在不從上述 output ( <foo>A>B</foo>
) 中進行字符串操作的情況下獲得A>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>B
。 后者只是一種序列化形式。
另一種合法的序列化形式是A>B
(因為在大多數情況下不需要轉義右尖括號)。 但是,想要生產A>B
可能存在兼容性原因,特別是如果您的 output 打算成為 HTML (盡管您沒有提到)。
如果您對 escaping 有充分的理由>
,那么我同意@kensen john 的回答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.