Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带禁用转义的Java XML文档XPath_Java_Xml_Xpath - Fatal编程技术网

带禁用转义的Java XML文档XPath

带禁用转义的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;amp;ABC&amp;quot;</Item> </Body> </Message&

目前,我需要在不转义的情况下获取XML元素

例如:

<?xml version="1.0" encoding="UTF-8"?>
<Message>
      <Header>H001</Header>
      <Body>
            <Item>ABC&amp;amp;ABC&amp;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&amp;&amp;ABC&amp;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&amp;&amp;ABC&amp;quot;