XSLT 1.0在第一个单元格中查找包含特定值的行,然后在此之后仅读取后续行

时间:2018-07-05 20:03:45

标签: xml xslt foreach xslt-1.0

我正在尝试编写XSLT代码,该代码在识别出“真实标头”行之后开始读取行:“真实标头”是在第一列中包含单词“模板名称”的行。

这就是使XML棘手的原因(因为并非每个传入的XML看起来都一样): -传入的XML文件可以包含任意数量的可变数量的元标题行(例如下面的XML示例中的第一个);和, -传入的XML文件可以包含任意数量的可变行“空白”行

这意味着“真实标头”的位置可能会从第三行到第十行变化(再次取决于“元标头”和“空白”行的数量)。

以下是我对XSLT代码的了解(不太有效):

    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
  <xsl:template match="/">
    <Payments>
      <xsl:if test="contains(column1, 'Template')" />
      <xsl:for-each select="data/row[position()&gt;1 and position()&lt;last()]">
        <Record>
...

XML可能类似于:

 <?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
  <t1>HeaderOne</t1>
  <t2>(All)</t2>
  <t3></t3>
  <t4></t4>
  <t5></t5>
</row>
<row>
  <t1></t1>
  <t2></t2>
  <t3></t3>
  <t4></t4>
  <t5></t5>
</row>
<row>
  <t1>Template name</t1>
  <t2>Currency<t2>
  <t3>Sum of Currency Amount</t3>
  <t4>Sum of Settlement Amount- always USD</t4>
  <t5>Reference</t5>
</row>
<row>
  <t1>Jerry Smith</t1>
  <t2>CAD</t2>
  <t3>232.00</t3>
  <t4>176.00</t4>
  <t5>ABCHoldings</t5>
</row>

以“ Jerry Smith”开头的行应开始进行转换。

1 个答案:

答案 0 :(得分:1)

这听起来像是following-sibling轴的一项工作。只是这样做...

<xsl:for-each select="root/row[t1 = 'Template name']/following-sibling::row">