XPath: просмотр иерархии таблиц по столбцам - PullRequest
0 голосов
/ 01 марта 2019

У меня есть структура xml, которая описывает простую таблицу с (x * 2) строками и всегда 2 столбцами (в следующем примере x = 1 для простоты):

<table>
  <tr>
    <td>
    1
    </td>
    <td>
    2
    </td>
  </tr>
  <tr>
    <td>
    3
    </td>
    <td>
    4
    </td>
  </tr>
</table>

Теперь я хотел бы просмотреть эту иерархию с выражениями XPath в следующем порядке:

1-3-2-4

В нотации доступа:

строка [1] :: столбец [1] -> строка [2] :: столбец [1] -> строка [1] :: столбец [2] -> строка [2] :: столбец [2]

Как я могу сделать это с помощью выражений XPath?

Я делаю все это внутри Schema ST4, но я также приветствую ответы на необработанные выражения xpath, так как я довольно сильно застрял.

К вашему сведению, я пришел из C ++, поэтому я подумал, что я должен иметь возможность использовать итератор (xsl: iterate), который выполняет итерацию по соответствующим строкам / столбцам, однако до сих пор я не мог сделать этоРабота.Но я довольно новичок в XPath, поэтому мне, вероятно, не хватает понимания, чтобы получить это самостоятельно.

Мой итератор xsl выбирает каждую нечетную строку (т.е. 1,3,5 ..) с помощью

tr [position () mod 2 = 1]

Это отлично работает.Затем я подумал, что другой итератор внутри итератора позволит мне перебирать каждый из столбцов этой строки (1,2,3 ..).Это, вероятно, работает, но как мне получить эквивалентный столбец строки next оттуда?

Имеет ли это смысл в XPath или мне нужно атаковать это под другим углом?

1 Ответ

0 голосов
/ 01 марта 2019

Вы упомянули xsl:iterate (который является частью XSLT 3), поэтому я предполагаю, что вы можете использовать XSLT 2 или 3, и там я думаю, что общую задачу обработки / вывода столбца ячеек можно выполнить с помощью позиционной группировки:

  <xsl:template match="table">
      <xsl:variable name="cols" select="count(tr[1]/td)"/>
      <xsl:for-each-group select="tr/td" group-by="position() mod $cols">
          <xsl:sequence select="current-group()!normalize-space()"/>
      </xsl:for-each-group>
  </xsl:template>

https://xsltfiddle.liberty -development.net / 3NJ38YV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...