下面是我的Xml,我需要使用php中的xpath按年龄排序
<Guest>
<Ages>
<Age>22</Age>
<Age>6</Age>
<Age>5</Age>
<Age>2</Age>
<Age>12</Age>
</Ages>
</Guest>
我尝试下面的代码,但没有工作
foreach ($xd->xpath('Guest/Ages[descendant::Age]') as $xd_age)
{
echo $xd_age->Age.',';
}
我需要如下
Ages : 2,5,6,12,22
答案 0 :(得分:1)
考虑一个XSLT解决方案。作为信息,XSLT是一种特殊用途的声明性语言,专门用于处理XML文件(而不仅仅是HTML的样式表)。实际上,所有通用语言,Java,C#,Perl,Python,VB都带有XSLT 1.0处理器,包括PHP -even命令行程序,如PowerShell和Bash。还存在各种专用处理器,例如开源Saxon(可以运行XSLT 2.0脚本)和Apache Xalan。
PHP可以嵌入或调用外部XSLT脚本(.xsl或.xslt),顺便提一下,它是格式良好的XML文件。以下是嵌入式解决方案:
Message
<强>输出强>
// Load the XML source
$doc = new DOMDocument();
$doc->load('Input.xml');
$xslstr = '<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<!-- IDENTITY TRANSFORM -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- SORT AGE CHILDREN IN EACH AGES NODE -->
<xsl:template match="Ages">
<xsl:copy>
<xsl:apply-templates select="Age">
<xsl:sort select="." order="ascending" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:transform>';
$xsl = new DOMDocument;
$xsl->loadXML($xslstr);
// Configure the processor
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
// Transform XML source
$newXml = $proc->transformToXML($doc);
echo $newXml;
// Save output to file
$xmlfile = 'Output.xml';
file_put_contents($xmlfile, $newXml);