XML - - PullRequest
       28

XML -

0 голосов
/ 24 августа 2018

Я работаю над школьным проектом и создаю xsl для xml, созданного для меня. Я сомневаюсь, что когда я делаю <xsl:for-each select="something/at/some">, когда я делаю <xsl:value-of select="kapa/alright"/>, меняются условия возвращения. потому что я хочу использовать значение в <me> в том же цикле

Представьте себе XML как

<something>
  <at>
    <some>
       <kapa>
          <alright>okay</alright>
       </kapa>
    </some>
  </at>
  <me>Hello</me>
</something>

То, что я хочу сделать после чего-то вроде:

<table border="1">
    <tr>
        <th>Me:</th>
        <th>you:</th>
    </tr>

    <xsl:for-each select="something/at/some">
        <tr>
          <th>
             <xsl:value-of select="kapa/alright"/>
          </th>
          <th>
             <xsl:value-of select="<!-- Here i would like to go back to get the value that is in <me> -->"/>
          </th>
        </tr>
     </xsl:for-each>
</table>

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Как подсказывает @ zx485, вы можете перейти обратно вверх по дереву, используя родительскую или родительскую ось. Кроме того, вы можете привязать переменную к элементу me вне xsl: for-each и ссылаться на нее внутри:

    <xsl:variable name="ME" select="something/me"/>
    <xsl:for-each select="something/at/some">
        <tr>
        <th>
            <xsl:value-of select="kapa/alright"/>
        </th>
        <th>
            <xsl:value-of select="$ME"/>
        </th>
        </tr>
    </xsl:for-each>
0 голосов
/ 25 августа 2018

В зависимости от ситуации вашего реального кода, вы можете использовать этот шаблон.Предполагается, что шаблон соответствует корневому элементу, и something является его дочерним элементом.

<xsl:template match="/">
  <table border="1">
    <tr>
        <th>Me:</th>
        <th>you:</th>
    </tr>
    <xsl:for-each select="something/at/some">
        <tr>
        <th>
            <xsl:value-of select="kapa/alright"/>
        </th>
        <th>
            <xsl:value-of select="../../me"/>
        </th>
        </tr>
    </xsl:for-each>
  </table>
</xsl:template>

Вывод:

<table border="1">
  <tr>
    <th>Me:</th>
    <th>you:</th>
  </tr>
  <tr>
    <th>okay</th>
    <th>Hello</th>
  </tr>
</table>
...