带禁用转义的Java XML文档XPath
目前,我需要在不转义的情况下获取XML元素 例如:带禁用转义的Java XML文档XPath,java,xml,xpath,Java,Xml,Xpath,目前,我需要在不转义的情况下获取XML元素 例如: <?xml version="1.0" encoding="UTF-8"?> <Message> <Header>H001</Header> <Body> <Item>ABC&amp;ABC&quot;</Item> </Body> </Message&
<?xml version="1.0" encoding="UTF-8"?>
<Message>
<Header>H001</Header>
<Body>
<Item>ABC&amp;ABC&quot;</Item>
</Body>
</Message>
我需要通过XPath获取Item元素的值。
但是,它会自动转义
我的结果=ABC&;ABC
预期=ABC&;amp;ABC&;引用
如何获得预期值?将内容放在CDATA中
注意:字符数据CDATA将告诉解析器将文本作为常规文本发送,无需解析就无标记
例如:
abc.xml
将内容放在CDATA中
注意:字符数据CDATA将告诉解析器将文本作为常规文本发送,无需解析就无标记
例如:
abc.xml
XPath将始终返回XML解析产生的节点值。解析后,XML中Item元素的字符串值为ABC&;ABC,这就是XPath给您的。如果你想要ABC&;amp;ABC&;引用;然后,您必须反转XML解析器的操作—这称为序列化。解析它所转换的unescapes实体和字符引用&;进入&。序列化会转义特殊字符,如&it-turns&into& XPath将始终返回XML解析产生的节点值。解析后,XML中Item元素的字符串值为ABC&;ABC,这就是XPath给您的。如果你想要ABC&;amp;ABC&;引用;然后,您必须反转XML解析器的操作—这称为序列化。解析它所转换的unescapes实体和字符引用&;进入&。序列化会转义特殊字符,如&it-turns&into& 嗨,安妮什,是的。我可以通过添加CDATA获得所需的内容。谢谢你,是的。我可以通过添加CDATA获得所需的内容。谢谢Michael,注意到了这一点。我还注意到,我在w3c文档生成期间运行的XMLParser已经转义了这个字符。在解析之前,我可以通过将&替换为另一个值来获取该值。谢谢Michael,注意到了这一点。我还注意到,我在w3c文档生成期间运行的XMLParser已经转义了这个字符。在解析之前,我可以通过将&替换为另一个值来获取该值。谢谢
<?xml version="1.0" encoding="UTF-8"?>
<Messages>
<Message>
<Header>H001</Header>
<Body>
<Item><![CDATA[ABC&&ABC&quot;]]></Item>
</Body>
</Message>
</Messages>
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Test {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("abc.xml");
Document doc = builder.parse(input);
doc.getDocumentElement().normalize();
NodeList list = doc.getElementsByTagName("Message");
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
NodeList children = node.getChildNodes();
for (int j = 0; j < children.getLength(); j++) {
node = children.item(j);
System.out.println(node.getTextContent().trim());
}
}
}
}
H001
ABC&&ABC&quot;