php transformToXML方法忽略排序
我搜索了好几天,但找不到解决方案。我使用php的XSLTProcessor方法输出由xsl文件转换的xml文件 除了xsl文件中的排序函数外,其他所有功能都工作得很好 (为了进行测试,我在xml文件中添加了xsl文件路径,并直接在Firefox中打开它:结果按@name属性进行了很好的排序,但通过php转换,结果却不是这样) 以下是一段代码片段: XML文件php transformToXML方法忽略排序,php,sorting,xslt,Php,Sorting,Xslt,我搜索了好几天,但找不到解决方案。我使用php的XSLTProcessor方法输出由xsl文件转换的xml文件 除了xsl文件中的排序函数外,其他所有功能都工作得很好 (为了进行测试,我在xml文件中添加了xsl文件路径,并直接在Firefox中打开它:结果按@name属性进行了很好的排序,但通过php转换,结果却不是这样) 以下是一段代码片段: XML文件 <?xml version="1.0" encoding="utf-8"?> <user> <clien
<?xml version="1.0" encoding="utf-8"?>
<user>
<clients>
<c name="A_client" id="1" generated="2013-04-17" p_count="1"/>
<c name="B_client" id="2" generated="2013-04-25" p_count="0"/>
<c name="C_client" id="3" generated="2013-04-26 23:35" p_count="0"/>
</clients>
</user>
是的,这是对的——但是当xml代码变得更详细时,输出会以一种奇怪的方式排序 使用此xml文件:
<?xml version="1.0" encoding="utf-8"?>
<user>
<clients>
<c name="C_client" id="3" generated="2013-04-26 23:35" p_count="0"/>
<c name="B_client" id="2" generated="2013-04-25" p_count="0"/>
<c name="cone" id="1" generated="2013-04-17" p_count="1"/>
<c name="c_two" id="1" generated="2013-04-17" p_count="1"/>
<c name="cthree" id="1" generated="2013-04-17" p_count="1"/>
<c name="Hoff" id="1" generated="2013-04-17" p_count="1"/>
<c name="Nimu" id="1" generated="2013-04-17" p_count="1"/>
<c name="Xing" id="1" generated="2013-04-17" p_count="1"/>
<c name="Whatever" id="1" generated="2013-04-17" p_count="1"/>
</clients>
</user>
在浏览器中直接打开xml文件时(添加了xsl文件路径)
(编辑)
我不知道发布我的libxslt版本是否有帮助,但如果有帮助,请点击这里:
1.1.24使用libxslt 1.1.25,您可以使用
xsl:sort
的lang
属性,该属性在大多数操作系统上都可以执行您想要的操作
对于libxslt1.1.24,您应该按照字符串的小写版本进行排序。不幸的是,XPath 1.0中没有小写的函数。您所能做的就是使用translate
并手动指定字符集。使用纯ASCII,以下功能可以正常工作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="user">
<ul class="topiclist">
<xsl:for-each select="clients/c">
<xsl:sort select="translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" lang="de"/>
<li class="round_corner_3"><xsl:value-of select="@name"/></li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
对我来说,工作正常。
<?xml version="1.0" encoding="utf-8"?>
<user>
<clients>
<c name="C_client" id="3" generated="2013-04-26 23:35" p_count="0"/>
<c name="B_client" id="2" generated="2013-04-25" p_count="0"/>
<c name="cone" id="1" generated="2013-04-17" p_count="1"/>
<c name="c_two" id="1" generated="2013-04-17" p_count="1"/>
<c name="cthree" id="1" generated="2013-04-17" p_count="1"/>
<c name="Hoff" id="1" generated="2013-04-17" p_count="1"/>
<c name="Nimu" id="1" generated="2013-04-17" p_count="1"/>
<c name="Xing" id="1" generated="2013-04-17" p_count="1"/>
<c name="Whatever" id="1" generated="2013-04-17" p_count="1"/>
</clients>
</user>
B_client
C_client
Hoff
Nimu
Whatever
Xing
c_two
cone
cthree
B_client
C_client
c_two
cone
cthree
Hoff
Nimu
Whatever
Xing
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="user">
<ul class="topiclist">
<xsl:for-each select="clients/c">
<xsl:sort select="translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" lang="de"/>
<li class="round_corner_3"><xsl:value-of select="@name"/></li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>