java - XPathExpression 选择子属性值忽略命名空间

标签 java xml xpath xml-namespaces

我对 XPathExpression 的工作还很陌生,我正在尝试构建一个表达式来将属性值检索到我的自定义 java 对象(即 Message)中。下面是虚拟 XML,其中包含许多消息节点。

我的 Java 代码应该读取此 XML,并相应地为消息创建 Java 对象列表。

这是我尝试构建 XpathExpression 的条件。

  1. 在此 Xpath 中jobReport/records/record/messages 检查title 是否具有值TestCompany。如有其他公司留言请跳过

我正在使用下面的 Xpath 表达式,但由于命名空间数据而无法返回数据。现在我需要使用表达式跳过这些 namespace 并获取 Title 值。

  1. jobReport/records/record/messages/*[local-name()='aa:title']
  2. jobReport/records/record/messages/*[local-name()='aa:title'/text()='TestCompany']
  3. //*[local-name()='aa:title'/text()='TestCompany']

j

<?xml version="1.0" encoding="UTF-8"?>
<jobReport>
    <jobID>123515412512221</jobID>
    <rundate>2016-09-16</rundate>
    <startTime>13:09:49</startTime>
    <endTime>13:10:39</endTime>
    <containsErrors>false</containsErrors>
    <records>
        <record>
            <recordid>20160920001</recordid>
            <primaryfilename>hello.pdf</primaryfilename>
            <result>
                <status>OK</status>
                <errorcode />
            </result>
            <messages>
                <aa:title xmlns="http://www.somedomain.com/example/test/xml/"
                    xmlns:aa="DummyProject/2016-04">TestCompany</aa:title>
                <aa:messageid xmlns="http://www.somedomain.com/example/test/xml/"
                    xmlns:aa="OP360CustomerArchive/2016-04">30.02.02.15.01</aa:messageid>
                <aa:messagefrom xmlns="http://www.somedomain.com/example/test/xml/"
                    xmlns:aa="OP360CustomerArchive/2016-04">FI</aa:messagefrom>
                <aa:messageto
                    xmlns="http://www.op.fi/hallintapalvelut/dokumenttirajapinta/xml/"
                    xmlns:aa="OP360CustomerArchive/2016-04">keijo</aa:messageto>
                <aa:mailid
                    xmlns="http://www.op.fi/hallintapalvelut/dokumenttirajapinta/xml/"
                    xmlns:aa="OP360CustomerArchive/2016-04">agreement</aa:mailid>
                <aa:phonenumber
                    xmlns="http://www.op.fi/hallintapalvelut/dokumenttirajapinta/xml/"
                    xmlns:aa="OP360CustomerArchive/2016-04">xml-tuote</aa:phonenumber>
            </messages>
        </record>
    </records>
</jobReport>

最佳答案

元素的 local-name() 不会包含命名空间前缀。

因此,不要使用 *[local-name()='aa:title'],而是使用 *[local-name()='title']

关于java - XPathExpression 选择子属性值忽略命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39600509/

相关文章:

java - 如何在单击相应的 ListView 项时创建一个包含 SQLite 信息的对话框?

java - 如何原子地比较和设置不同的变量?

python - 转换自定义 XML 类语法的最佳方式

ruby - XPath中的 `@attr!="值"` and ` not(@attr ="value")`有什么区别

java - 读取txt文件并将所有内容显示为粗体

java - 如何让一个 App Engine 项目查询不同的 App Engine 数据存储区?

java - 大型 xml 的 Xsl 转换

c# - 将 DataContract 作为 XML 保存在数据库中

c# - 使用 HtmlAgilityPack 从 html 中提取值

python-2.7 - 如何通过 Selenium Python 点击​​某个元素