获取第一个节点的节点值

时间:2011-06-03 16:38:04

标签: java xml

我有以下XML:

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

并且只想将开始标记的节点值设为A&gt;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&gt;B</foo>

如果有人可以澄清,如果有一种方法我们可以获得A&gt;B而不从上面的输出中进行字符串操作(<foo>A&gt;B</foo>

将会有所帮助

2 个答案:

答案 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&gt;B。后者只是一种序列化形式。

另一个合法的序列化表单是A>B(因为right angle bracket does not need to be escaped in most cases)。但是,可能存在想要生成A&gt;B的兼容性原因,特别是如果您的输出是HTML(虽然您没有提到)。

如果你有充分的理由逃避>,那么我同意@kensen john的答案就是为了完成这项工作。