FOR XSLT中的属性循环

时间:2018-02-21 20:00:41

标签: xml xslt

我正在尝试进行FOR循环,这会增加括号中的属性名称中的数字" 0,1等等#34; @cpu [0],@ cpu [1],... 然后显示属性的值,但我不知道它是否可能。 FOR循环工作正常,但xpath不显示任何内容。

我有这个XML文档:

axis=1

这是我的XSL文档:

<?xml version="1.0" encoding="UTF-8"?>
  <root version="1.2">
    <sample cpu0="20" cpu1="30"></sample>
  </root>

我知道我可以正常显示这些值(&#34;值 - 选择=&#34; / root / * / @ cpu0&#34;等等),但是当我有例如20 cpus时我想有一个显示所有这些值的自动过程。 你有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

@cpu[0]将选择位置谓词cpu所包含的名为[position() = 0]的属性,因为位置从1开始,它永远不会为真。而且你还没有任何名为cpu的属性。如果要选择名为cpu0的属性,并且要在运行时构造名称,则需要@*[local-name() = concat('cpu', $i)]

另一方面,我建议只处理root/*/@*[starts-with(local-name(), 'cpu')]并进行排序,例如

<xsl:apply-templates select="root/*/@*[starts-with(local-name(), 'cpu')]">
  <xsl:sort select="translate(local-name(), 'cpu', '')" data-type="number"/>
</xsl:apply-templates>

我认为没有必要编写一个命名模板和一些繁琐的变量增量操作来处理一些共享名称前缀的属性节点。