这是我的 XML (wls.xml)
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
这是 XSD (wls.xsd)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
这是我用来使用 Xpath 解析上述文件的 java 类
public static void test1()
{
String ipFile="w3s.xml";//wls.xsd
Node fetchNode=null;
FileInputStream fileip;
try {
fileip = new FileInputStream(new File(ipFile));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document xmlDocument = builder.parse(fileip);
System.out.println(xmlDocument.getDocumentElement().getNodeName());
System.out.println(xmlDocument.getDocumentElement().getLocalName());
evalXpath(xmlDocument,"//xs:element");//FAILS
evalXpath(xmlDocument,"//element");//FAILS
evalXpath(xmlDocument,"/schema/element");//WORKS
evalXpath(xmlDocument,"/xs:schema/xs:element");//FAILS
evalXpath(xmlDocument,"//heading");//FAILS
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void evalXpath(Document xmlDocument,String expression)
{
Node fetchNode=null;
NodeList fetchNodeList=null;
//String expression=null;
try
{
XPath xPath = XPathFactory.newInstance().newXPath();
fetchNode = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE);
System.out.println(fetchNode);
fetchNodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
System.out.println(fetchNodeList.getLength());
}
catch (XPathExpressionException e) {
e.printStackTrace();
}
}
}
当我解析 XML 文件并运行类型为 '\ElemName' 的表达式时,它可以正常工作并获取节点。不是然后我对 XSD 文件做同样的事情,它返回 NULL。对于 XSD,我需要起诉 '\RootNode\IntermediateNode....\ReqdNode' 我已经尝试使用不同的 XML 和 XSD 进行此操作,只是附加这些短文件以进行说明。
问题 2 还有一个问题:假设我有一个元素 'xs:schema' 并且我只需要获取像 'schema' 这样的本地名称部分(没有命名空间前缀),我该怎么做?我已经尝试过 getLocalName() 但它不起作用。
(如果您需要知道,我正在使用 jdk6)
请至少为我的第一个问题提供解决方案。
提前致谢。