gpt4 book ai didi

java - 我对 XPath 做错了什么?

转载 作者:行者123 更新时间:2023-11-29 10:07:38 25 4
gpt4 key购买 nike

我正在尝试将 xsd 架构作为 xml 文档进行操作,我相信这应该不是问题。但是面对 XPath 的麻烦。无论我尝试什么 XPath,它都不会返回任何内容。尝试使用或不使用 namespace 但没有成功。请帮助我了解我做错了什么?

我的 xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.mydomain.com" xmlns="http://www.mydomain.com" elementFormDefault="qualified">

<xs:complexType name="Label">
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="Listener"/>
</xs:choice>
</xs:complexType>

</xs:schema>

应用程序代码是:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setValidating(false);
domFactory.setNamespaceAware(true);
domFactory.setIgnoringComments(true);
domFactory.setIgnoringElementContentWhitespace(true);

try {
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document dDoc = builder.parse("C:/Temp/test.xsd");

// This part works
Node rootNode = dDoc.getElementsByTagName("xs:schema").item(0);
System.out.println(rootNode.getNodeName());

// This part doesn't work
XPath xPath1 = XPathFactory.newInstance().newXPath();
NodeList nList1 = (NodeList) xPath1.evaluate("//xs:schema", dDoc, XPathConstants.NODESET);
System.out.println(nList1.item(0).getNodeName());

// This part doesn't work
XPath xPath2 = XPathFactory.newInstance().newXPath();
NodeList nList2 = (NodeList) xPath2.evaluate("//xs:element", rootNode, XPathConstants.NODESET);
System.out.println(nList2.item(0).getNodeName());

}catch (Exception e){
e.printStackTrace();
}

最佳答案

使用 XPath.setNamespaceContext() 设置命名空间上下文。这会将 xs 前缀绑定(bind)到 http://www.w3.org/2001/XMLSchema 命名空间。

关于java - 我对 XPath 做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com