gpt4 book ai didi

java - 使用 XPath 从 XML 文件获取特定值

转载 作者:行者123 更新时间:2023-12-01 15:14:52 30 4
gpt4 key购买 nike

所以我这里有一个 XML 文件,我想使用 XPath 从中获取一个值。相关文件是一个 zip 格式的 XML 文件,您可以下载 here :

我相信它是有效的 XML。

我当前的目标是解析文档中的last(最新)LMP_PRC 值。

我当前的代码如下所示,每次都返回一个空字符串:

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr =
xpath.compile("//m:OASISReport/m:MessagePayload/m:RTO/m:REPORT_ITEM[3]/m:REPORT_DATA[/m:DATA_ITEM='LMP_PRC'][last()]/m:VALUE/text()") ;
String result = (String) expr.evaluate(doc, XPathConstants.STRING);

m:REPORT_ITEM[3] 一直让我感到困惑,所以我尝试了几乎所有的数字,但没有成功。

最佳答案

m:REPORT_ITEM[3] 仅表示第 3 个匹配的项。您没有获得任何匹配项,原因是:

m:REPORT_DATA[/m:DATA_ITEM='LMP_PRC'][last()]

您需要从那里开始的相对路径,而不是绝对路径:

m:REPORT_DATA[m:DATA_ITEM='LMP_PRC'][last()]

所以整个事情看起来像:

//m:OASISReport/m:MessagePayload/m:RTO/m:REPORT_ITEM[3]/m:REPORT_DATA[m:DATA_ITEM='LMP_PRC'][last()]/m:VALUE/text()

要处理的另一件事是命名空间解析。有关您的案例中发生的情况的详细摘要,请参阅 http://blog.davber.com/2006/09/17/xpath-with-namespaces-in-java/ 。所以你应该添加类似的内容:

private static NamespaceContext getNamespaceContext() {
NamespaceContext namespaceContext = new NamespaceContext() {
public String getNamespaceURI(String prefix) {
String uri = null;
if (prefix == null) {
throw new IllegalArgumentException("No prefix provided!");
} else if(prefix.equals("m")) {
uri = "http://oasis.caiso.com/mrtu-oasis/xsd/OASISReport.xsd";
}
return uri;
}

@SuppressWarnings("rawtypes")
@Override
public Iterator getPrefixes(String namespaceURI) {
// TODO Auto-generated method stub
return null;
}

@Override
public String getPrefix(String namespaceURI) {
// TODO Auto-generated method stub
return null;
}
};

return namespaceContext;
}

然后使用该方法在您的 xpath 对象上设置命名空间上下文:

xpath.setNamespaceContext(getNamespaceContext());

关于java - 使用 XPath 从 XML 文件获取特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766482/

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