gpt4 book ai didi

java - 如何使用 NameSpace uri 解析 XML 文件

转载 作者:行者123 更新时间:2023-12-01 13:00:19 30 4
gpt4 key购买 nike

我无法从下面的 xml 文件中读取属性值。我是 XPath 新手,尝试了网上所有可用的解决方案,但没有成功。

下面是输入xml

<?xml version="1.0" encoding="UTF-8"?>
<ns0:TPML xmlns:ns0="urn:x-schemas-xx:tpmbase/tpml/tpml_1_2">
<ns1:tpHeader xmlns:ns1="urn:x-schemas-xx:tpmbase/tpml/tpheader_1_2">
<ns1:messageTimestamp>2010-02-22T11:49:24.13Z</ns1:messageTimestamp>
<ns1:messageSender>Sml2Tpml</ns1:messageSender>
<ns1:originatingSystem>
<ns1:name>SummitGboUtp</ns1:name>
<ns1:location>LDN</ns1:location>
</ns1:originatingSystem>
<ns1:trackingId>3345069L</ns1:trackingId>
<ns1:tradeId>3345069L</ns1:tradeId>
<ns1:transactionId/>
<ns1:versionNo>1</ns1:versionNo>
</ns1:tpHeader>
</ns0:TPML>

这是java代码

package com.db.test.main;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

import javax.xml.namespace.NamespaceContext;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class SummitTestXSL
{
public static void main(String arg[])
{

try
{
FileInputStream file = new FileInputStream(new File("TestXml.xml"));
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder =builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(file);
XPath xPath = XPathFactory.newInstance().newXPath();
xPath.setNamespaceContext(new MyNamespaceContext());

System.out.println("*************************");

String expression="/ns0:TPML/ns1:tpHeader/ns1:messageTimestamp";

System.out.println(expression);

String str = xPath.compile(expression).evaluate(xmlDocument);

System.out.println(str);

} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException 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();
}
finally
{

}

}


private static class MyNamespaceContext implements NamespaceContext {

public String getNamespaceURI(String prefix) {
if("ns0".equals(prefix)) {
return "urn:x-schemas-xx:tpmbase/tpml/tpml_1_2";
}
else if("ns1".equals(prefix))
{
return "urn:x-schemas-xx:tpmbase/tpml/tpheader_1_2";
}
return null;
}

public String getPrefix(String namespaceURI) {
return null;
}

public Iterator getPrefixes(String namespaceURI) {
return null;
}

}
}

我想读取messageTimeStamp的值。

最佳答案

您似乎没有在 DocumentBuilderFactory 上设置 NamespaceAware。您需要在创建构建器之前执行此操作:

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true); // <---- This line
DocumentBuilder builder =builderFactory.newDocumentBuilder();

关于java - 如何使用 NameSpace uri 解析 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23564575/

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