我有以下XML:
<?xml version='1.0' ?>
<foo>A>B</foo>
并且只想将开始标记的节点值设为A>B
,如果我们使用getNodeValue,它会将其转换为A&gt; B,这是不需要的。
因此我决定使用变形金刚
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();
但是这会将以下输出作为结果的一部分显示为<foo>A>B</foo>
如果有人可以澄清,如果有一种方法我们可以获得A>B
而不从上面的输出中进行字符串操作(<foo>A>B</foo>
)
答案 0 :(得分:0)
因为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());
这会将其编码为您希望它的格式。 它不是非常友好,因为您正在为每个节点值应用编码。
答案 1 :(得分:0)
实际上getNodeValue()不是“转换”字符串。
当从文件解析XML或通过转换生成XML时,生成的信息模型是字符串 A>B
,而不是A>B
。后者只是一种序列化形式。
另一个合法的序列化表单是A>B
(因为right angle bracket does not need to be escaped in most cases)。但是,可能存在想要生成A>B
的兼容性原因,特别是如果您的输出是HTML(虽然您没有提到)。
如果你有充分的理由逃避>
,那么我同意@kensen john的答案就是为了完成这项工作。