【问题标题】:Loop through sub elements of different name within a node using XSLT使用 XSLT 遍历节点内不同名称的子元素
【发布时间】:2013-03-07 19:19:30
【问题描述】:

我是 XSLT 的新手。我有以下 xml,想知道如何使用 XSLT 遍历 A 的每个元素以获取它们的值。此外,对于每个元素,如果位置 mod 3 = 2,则获取该元素值及其下一个元素值。例如 - 因为 02 mod 3 = 2,所以得到值 22 和 2.5,等等。

感谢任何帮助。

谢谢。

<A>
 <A01>abc</A01>
 <A02>22</A02>
 <A03>2.5</A03>
 <A04>0</A04>
 <A05>2</A05>
 <A06>1.8</A06>
 <A07>2</A07>
 <A08>3</A08>
 <A09>1.9</A09>
</A>
<A>
 <A01>abb</A01>
 <A02>22</A02>
 <A03>1.5</A03>
 <A04/>
</A>

我希望结果如下所示:

abc|22|2.5|0 abc|2|1.8|2 abc|3|1.9| abb|22|1.5|

【问题讨论】:

  • 你希望你的输出是什么样的?
  • 我希望结果如下所示:abc|22|2.5|0 abc|2|1.8|2 abc|3|19.9|

标签: xml xslt loops tags


【解决方案1】:

从您描述的输出看来,您希望为所有 n 生成列是子 1、n、n+1、n+2 的行,使得 n mod 3 = 2。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="*/A/*[(position() mod 3) = 2]"/>
  </xsl:template>

  <xsl:template match="*">
    <xsl:value-of select="concat(../*[1],'|', ., '|',
        following-sibling::*[1], '|', following-sibling::*[2],
        '&#10;')"/>
  </xsl:template>
</xsl:stylesheet>

当应用于以下 XML 时(您的示例包装在一个额外的根元素中以使其格式正确)

<root>
<A>
 <A01>abc</A01>
 <A02>22</A02>
 <A03>2.5</A03>
 <A04>0</A04>
 <A05>2</A05>
 <A06>1.8</A06>
 <A07>2</A07>
 <A08>3</A08>
 <A09>1.9</A09>
</A>
<A>
 <A01>abb</A01>
 <A02>22</A02>
 <A03>1.5</A03>
 <A04/>
</A>
</root>

这个样式表产生正确的结果

abc|22|2.5|0
abc|2|1.8|2
abc|3|1.9|
abb|22|1.5|

【讨论】:

  • 谢谢。这正是我正在寻找的:)
猜你喜欢
  • 1970-01-01
  • 2013-09-13
  • 2014-01-11
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 2023-03-29
相关资源
最近更新 更多