XSLT 1.0 находит строку, содержащую определенное значение в первой ячейке, а затем читает только последующие строки - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь написать XSLT-код, который начинает чтение строк после того, как он определил строку «реального заголовка»: «настоящий заголовок» - это строка, в первом столбце которой содержится слово «Имя шаблона».

Вот что делает XML сложным (потому что не каждый входящий XML будет выглядеть одинаково): - Входящий XML-файл может содержать любое небольшое переменное количество строк мета-заголовка (как первая в приведенном ниже примере XML); а также, - Входящий XML-файл может содержать любое небольшое переменное количество строк «пробела»

Это означает, что «реальный заголовок» может варьироваться по положению в любом месте от 3-й строки до 10-й (опять же, в зависимости от количества строк «мета-заголовка» и «пробела»).

Вот фрагмент того, что у меня есть для кода 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>

Получившееся преобразование должно начинаться с строки, начинающейся с «Джерри Смит»

1 Ответ

0 голосов
/ 05 июля 2018

Звучит как работа для оси following-sibling. Просто сделай это ...

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