How to get the highest value of a specific tag in an XML file using SimpleXML?(如何使用SimpleXML获取XML文件中特定标记的最大值?)
本文介绍了如何使用SimpleXML获取XML文件中特定标记的最大值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的XML文件如下所示:
<log>
<entry entry_id="E200911115777">
<entry_data>
<entry_title>Lorem ipsum dolor</entry_title>
<entry_date>1999-04-15</entry_date>
</entry_data>
</entry>
<entry entry_id="E205011115999">
<entry_data>
<entry_title>Lorem ipsum dolor</entry_title>
<entry_date>2004-12-15</entry_date>
</entry_data>
</entry>
<entry entry_id="E199912119116">
<entry_data>
<entry_title>Lorem ipsum dolor</entry_title>
<entry_date>1990-11-20</entry_date>
</entry_data>
</entry>
</log>
我正在寻找将返回Entry_Date标记的最高值的代码,在本例中为2004-12-15。我使用的是SimpleXML,但我当然对其他解决方案持开放态度。干杯。
推荐答案
i.这里有一个简单的XSLT1.0解决方案,它最接近使用单个XPath表达式(不可能只有一个XPath 1.0表达式选择需要的节点):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="entry">
<xsl:copy-of select=
"self::node()
[not((preceding-sibling::entry | following-sibling::entry)
[translate(*/entry_date,'-','')
>
translate(current()/*/entry_date,'-','')
]
)
]
"/>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<log>
<entry entry_id="E200911115777">
<entry_data>
<entry_title>Lorem ipsum dolor</entry_title>
<entry_date>1999-04-15</entry_date>
</entry_data>
</entry>
<entry entry_id="E205011115999">
<entry_data>
<entry_title>Lorem ipsum dolor</entry_title>
<entry_date>2004-12-15</entry_date>
</entry_data>
</entry>
<entry entry_id="E199912119116">
<entry_data>
<entry_title>Lorem ipsum dolor</entry_title>
<entry_date>1990-11-20</entry_date>
</entry_data>
</entry>
</log>
生成所需的正确结果:
<entry entry_id="E205011115999">
<entry_data>
<entry_title>Lorem ipsum dolor</entry_title>
<entry_date>2004-12-15</entry_date>
</entry_data>
</entry>
ii.更高效的XSLT 1.0解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:apply-templates>
<xsl:sort order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="entry">
<xsl:if test="position() = 1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
当将此转换应用于相同的XML文档(如上)时,同样会产生所需的正确结果:
<entry entry_id="E205011115999">
<entry_data>
<entry_title>Lorem ipsum dolor</entry_title>
<entry_date>2004-12-15</entry_date>
</entry_data>
</entry>
这篇关于如何使用SimpleXML获取XML文件中特定标记的最大值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何使用SimpleXML获取XML文件中特定标记的最大值?
基础教程推荐
猜你喜欢
- 超薄框架REST服务两次获得输出 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01