我有一个XML文件(下面是其中的一部分),包含超过1000行代码,如下所示
<?xml version="1.0" encoding="UTF-8" ?>
<exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<viewpoints>
<view name="002. PG vs MD - Overview">
<viewpoint tool="none" render="shaded" lighting="headlight" focal="30.3740807783">
<camera projection="persp" near="1.0000000000" far="10.0000000000" aspect="1.4551804424" height="0.7853981634">
<position>
<pos3f x="14.2834498406" y="-183.6741132934" z="35.6151508952"/>
</position>
<rotation>
<quaternion a="0.3979643079" b="0.0563656552" c="0.1284089725" d="0.9066192466"/>
</rotation>
</camera>
</viewpoint>
</view>
<view name="004. EL vs MD - Overview">
<viewpoint tool="none" render="shaded" lighting="headlight" focal="30.3740807783">
<camera projection="persp" near="1.0000000000" far="10.0000000000" aspect="1.4551804424" height="0.7853981634">
<position>
<pos3f x="14.2834498406" y="-183.6741132934" z="35.6151508952"/>
</position>
<rotation>
<quaternion a="0.3979643079" b="0.0563656552" c="0.1284089725" d="0.9066192466"/>
</rotation>
</camera>
</viewpoint>
</view>
</viewpoints>
</exchange>
我想使用属性“name”对上面的代码进行排序,但我希望使用属性值中的第一个单词进行排序。在上面的例子中,我想使用 PG / EL 感到疼痛。
P.S:请注意我对XSLT或其他任何工具都不是很熟悉,但我可能很难理解它。
答案 0 :(得分:2)
您已经举例说明了要排序的两个元素,对于这两个元素,“第一个单词”可以获得为substring(@name, 6, 2)
或substring-after(substring-before(@name, ' '), ' ')
。如果这些表达式中的任何一个适用于您的所有数据,请将它们用作xsl:sort
中的排序键。否则,你需要告诉我们
(a)你究竟是什么意思“单词”
(b)您正在使用的XSLT版本(如果您可以使用XSLT 2.0,任何更复杂的字符串操作将变得非常容易)
答案 1 :(得分:-1)
没关系,我明白了。以下XLST对XML进行排序
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">
<root>
<xsl:apply-templates select="viewpoints/view">
<xsl:sort select="substring-after(substring-before(@name, 'vs'), '.')" order="ascending"/>
</xsl:apply-templates>
</root>
</xsl:template>
<xsl:template match="view">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
但是此代码会删除&#34; <view>
&#34;之前的所有标记。标记并替换为&#34; <root>
&#34;。它编辑了视图标记,如下所示&#34; <view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name=" #viewname# ">
&#34;。以下是输出
<?xml version="1.0"?>
<root>
<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="004. EL vs MD - Overview">
<viewpoint tool="none" render="shaded" lighting="headlight" focal="30.3740807783">
<camera projection="persp" near="1.0000000000" far="10.0000000000" aspect="1.4551804424" height="0.7853981634">
<position>
<pos3f x="14.2834498406" y="-183.6741132934" z="35.6151508952"/>
</position>
<rotation>
<quaternion a="0.3979643079" b="0.0563656552" c="0.1284089725" d="0.9066192466"/>
</rotation>
</camera>
</viewpoint>
</view>
<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="002. PG vs MD - Overview">
<viewpoint tool="none" render="shaded" lighting="headlight" focal="30.3740807783">
<camera projection="persp" near="1.0000000000" far="10.0000000000" aspect="1.4551804424" height="0.7853981634">
<position>
<pos3f x="14.2834498406" y="-183.6741132934" z="35.6151508952"/>
</position>
<rotation>
<quaternion a="0.3979643079" b="0.0563656552" c="0.1284089725" d="0.9066192466"/>
</rotation>
</camera>
</viewpoint>
</view>
</root>
如何解决这个问题?
PS:请查看上面的XML代码