更新信息:
以前,我问过如何根据每个元素的几个属性对XML进行排序。答案是有效的(这就是为什么我要创建一个新问题),但我发现我受到限制,我的PHP版本没有安装XSLT库,我的IT也不会安装它。
我找到了一种方法来使我的XML成为一个关联数组,但这似乎非常繁琐。
另外,我有几个级别的排序(大约6个);由于有这么多,我无法实现下面的其他答案。
所以,我的最后一个问题是:是否可以在不使用XSLT的情况下对XML进行排序?每当我谷歌它,所有网站都会展示如何使用XSLT ...
再次感谢大家!
OLD INFO ::::::我在DOM和XSL之间做了大量的研究,似乎找不到对多个元素进行排序的方法。我已经使用DOM成功生成了我的XML,但现在我想基于多个值进行排序。
我希望在<item>
标题<Priority>
之下生成另一个孩子,或者我可以将其放在<item priority=__>
为简单起见,这是我正在尝试做的一个愚蠢的版本:
预先XML:
<root>
<item>
<attr1>2</attr1>
<attr2>50</attr2>
</item>
<item>
<attr1>1</attr1>
<attr2>100</attr2>
</item>
<item>
<attr1>2</attr1>
<attr2>10</attr2>
</item>
<item>
<attr1>2</attr1>
<attr2>50</attr2>
</item>
<item>
<attr1>1</attr1>
<attr2>75</attr2>
</item>
<item>
<attr1>2</attr1>
<attr2>1</attr2>
</item>
</root>
我想找到一种方法首先在attr1上进行排序,如果它们是相同的,那么就在attr2上排序。正如我之前所说,我不关心我如何排序,如果我们在<item priority = ___>
之类的元素中使用该属性,每个<item>
的新元素,或者全新的xml文件,我也不在乎。我对于接下来要做什么感到很遗憾;到目前为止,我一直在使用PHP,但可以切换到别的东西。提前谢谢!
答案 0 :(得分:1)
如果您更喜欢这种路线,可以通过sort元素和concat()使用xslt完成。
<xsl:template match="/root">
<xsl:apply-templates>
<xsl:sort select="concat(attr1,attr2)"/>
</xsl:apply-templates>
</xsl:template>
另一种方法是将所有元素加载到项目对象的集合中,使用attr1和attr2属性等,然后按照规则对集合进行排序,然后可以将其写回到xml中它是新排序的。
答案 1 :(得分:0)
function getval($i) {
global $feeditem;
return $feeditem->getElementsByTagName($i)->item(0)->nodeValue;
}
$info = "";
$xmldoc = new DOMDocument();
$xmldoc->load('path_to_xml_file_here.xml');
foreach ($xmldoc->getElementsByTagName('item') as $feeditem){
if(getval('attr1') == getval('attr2')) {
#blablabla
} else {
#blablabla
}
}