我想操纵xsd模式作为一个xml文档,我认为这不应该是一个问题。但面临XPath的麻烦。无论我尝试XPath,它都不会返回任何内容。尝试使用或不使用命名空间,但没有成功。 请帮我理解我做错了什么?我在做什么错误的XPath?
我的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();
}
然后xPath1.evaluate(“// schema”,...)应该这样做吗? – willcodejavaforfood 2010-08-25 17:58:04
@willcodejavaforfood:No.'// schema'表示没有命名空间下树中的任何'schema'元素。应该是'/ xs:schema' – 2010-08-25 18:14:18
@Ajjandro - 确定这很有意义,谢谢 – willcodejavaforfood 2010-08-25 20:40:16