gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:30:58 25 4
gpt4 key购买 nike

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

这是 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/

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