XPath 未读取带有命名空间的 xml 标记
XPath not reading xml tag with namespace
您好,我正在尝试读取 xml,其中定义了命名空间,并且一些标签带有命名空间。但是当我使用 XPath 读取这些标签时,命名空间标签总是给出空值。
样本XML
<?xml version="1.0" encoding="UTF-8"?>
<Employees xmlns:ULAD="http://www.datamodelextension.org/Schema/ULAD">
<EXTENSION>
<OTHER>
<ULAD:HMDAGenderType>Male</ULAD:HMDAGenderType>
</OTHER>
</EXTENSION>
</Employees>
示例Java要阅读的程序ULAD:HMDAGenderType
public static void main(String args[]) throws XPathExpressionException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("C:\test.xml");
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
XPathExpression expr = xpath.compile("/Employees/EXTENSION/OTHER/ULAD:HMDAGenderType");
System.out.println("Gender :: " + expr.evaluate(doc, XPathConstants.STRING));
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
输出::空
预期输出::男性
如何阅读此类标签?
尝试使用 XPath local-name()
而不是
XPathExpression expr = xpath.compile("/Employees/EXTENSION/OTHER/ULAD:HMDAGenderType");
请尝试
XPathExpression expr = xpath.compile("//*[local-name()='HMDAGenderType']");
要直接获取文本属性值,您可以使用此 XPath:
XPathExpression expr = xpath.compile("//*[local-name()='HMDAGenderType']/text()");
您好,我正在尝试读取 xml,其中定义了命名空间,并且一些标签带有命名空间。但是当我使用 XPath 读取这些标签时,命名空间标签总是给出空值。
样本XML
<?xml version="1.0" encoding="UTF-8"?>
<Employees xmlns:ULAD="http://www.datamodelextension.org/Schema/ULAD">
<EXTENSION>
<OTHER>
<ULAD:HMDAGenderType>Male</ULAD:HMDAGenderType>
</OTHER>
</EXTENSION>
</Employees>
示例Java要阅读的程序ULAD:HMDAGenderType
public static void main(String args[]) throws XPathExpressionException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("C:\test.xml");
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
XPathExpression expr = xpath.compile("/Employees/EXTENSION/OTHER/ULAD:HMDAGenderType");
System.out.println("Gender :: " + expr.evaluate(doc, XPathConstants.STRING));
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
输出::空
预期输出::男性
如何阅读此类标签?
尝试使用 XPath local-name()
而不是
XPathExpression expr = xpath.compile("/Employees/EXTENSION/OTHER/ULAD:HMDAGenderType");
请尝试
XPathExpression expr = xpath.compile("//*[local-name()='HMDAGenderType']");
要直接获取文本属性值,您可以使用此 XPath:
XPathExpression expr = xpath.compile("//*[local-name()='HMDAGenderType']/text()");