java - 在未排序的 xml 文件中查找特定值

标签 java xml parsing xpath sax

使用java,我试图找到最近的最高条目号。该条目需要指定特定类型。它需要从那里提取值。

这是 xml 的样子

<XmlFile>
   <data_item>
        <data_report>
            <type>My_Type</type>
            <entry_number>12</entry_number>                
            <value>1234</value>
        </data_report>
        <data_report>
            <type>My_Type</type>
            <entry_number>9</entry_number>                
            <value>11234</value>
        </data_report>
   </data_item>
   <data_item>
      <data_report>
             <type>My_Type</type>
            <entry_number>17</entry_number>                
            <value>112354</value>
      </data_report>
      <data_report>
             <type>Not_My_Type</type>
            <entry_number>122</entry_number>                
            <value>11234</value>
      </data_report>
   </data_item>
</XmlFile>

因此,要点是我需要的数据必须是“My_Type”,它可以在任何 data_item 中,但它需要找到 my_type 的所有项目中的最大间隔,仅提取值。

我曾尝试使用 Xpath 执行此操作,但无法完全正常工作。在这种情况下,第三个数据报告(在第二个数据项中)将是我所追求的,因为它在“我的类型”时具有最高的条目编号,因此我希望程序为我获取数字 112354。

有没有办法使用 Xpath 来做到这一点?我试图让它工作的文件比这个大得多,但 Xpath 似乎是最简单的选择,如果 DOM 或 SAX 更适合的话,我并不反对它们。

谢谢!

最佳答案

max() 函数在 XPath 1.0 中不可用。

产生所需值(如果有多个节点具有所需最大属性,则为第一个值)的纯 XPath 表达式为:

   string(
      /*/*/*[type='My_Type'
           and
             not(/*/*/*[type='My_Type']/entry_number > entry_number)
            ][1]/value
          )

基于 XSLT 的验证:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
     <xsl:copy-of select=
     "string(
      /*/*/*[type='My_Type'
           and
             not(/*/*/*[type='My_Type']/entry_number > entry_number)][1]/value
          )"/>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<XmlFile>
    <data_item>
        <data_report>
            <type>My_Type</type>
            <entry_number>12</entry_number>
            <value>1234</value>
        </data_report>
        <data_report>
            <type>My_Type</type>
            <entry_number>9</entry_number>
            <value>11234</value>
        </data_report>
    </data_item>
    <data_item>
        <data_report>
            <type>My_Type</type>
            <entry_number>17</entry_number>
            <value>112354</value>
        </data_report>
        <data_report>
            <type>Not_My_Type</type>
            <entry_number>122</entry_number>
            <value>11234</value>
        </data_report>
    </data_item>
</XmlFile>

计算 XPath 表达式并将计算结果复制到输出:

112354

关于java - 在未排序的 xml 文件中查找特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061059/

相关文章:

parsing - 秒差距输入意外结束

java - Axis 2 会自动创建(并保存)wsdl 文件吗?

java - 使用 JFrame 和 BufferedReader 获取文件内容

c# - 查找数组或 XML 中值的频率 (C#)

Android 数据绑定(bind) SetSupportActionBar

ios - 如何在post方法ios中向服务器请求数据?

javascript - 在 JS (Node.js) 中读取 txt 文件的行

Java DOM 解析器 XML

java - 如何使用 jxl 检查 Excel 文件是否受密码保护

java - 在 xml 中附加节点时出现错误的文档错误