XML в таблицу - PullRequest
       3

XML в таблицу

0 голосов
/ 01 ноября 2019

Я пытаюсь превратить следующее в таблицу, но мне трудно понять, как оно анализирует все дочерние узлы. Будет ли он проходить через каждый элемент до последнего или мне нужно иметь for-each для каждого родительского узла? Кроме того, если разрешено несколько вхождений "капри", нужно ли мне иметь ячейки для каждого возможного вхождения (скажем, если есть максимум 3, а у меня только 2, тогда мне все равно нужно отображать 3 ячейки).

XML:

<Persons xmlns = "">
<Person>
   <Shirts>One</Shirts>
   <Pants>
      <Jeans>
          <Shorts>One</Shorts>
          <Capris>One</Capris>
          <Capris>Two</Capris>
      </Jeans>
      <Dress>One</Dress>
   </Pants>
</Person>
<Person>
   <Shirts>One</Shirts>
   <Pants>
      <Jeans>
          <Shorts>One</Shorts>
          <Capris>One</Capris>
          <Capris>Two</Capris>
          <Capris>Three</Capris>
      </Jeans>
      <Dress>One</Dress>
   </Pants>
</Person>
</Persons>

XSL:

<table border="1">
   <tr bgcolor="yellow"> 
   <td><b>Shirts</b></td> 
   <td><b>Shorts</b></td> 
   <td><b>Capris</b></td>
   <td><b>Capris</b></td>
   <td><b>Capris</b></td>
</tr>
<xsl:for-each select="Persons">
  <xsl:sort select="Persons/Persib" />
    <tr style="font-size: 10pt; font-family: verdana">
    <td><xsl:value-of select="Shirts"/></td>
    <td><xsl:value-of select="Shorts"/></td>
    <td><xsl:value-of select="Capris"/></td>    
    </tr>
</xsl:for-each>
</table>

1 Ответ

0 голосов
/ 01 ноября 2019

У вас неверное правило сопоставления xsl:for-each.
Используйте следующий шаблон: он соответствует корневому элементу <Persons>, создает элементы <html> и <body> и <table>.

Наконец, он перебирает элементы <Person> с xsl:for-each. Это работает, потому что контекстный узел является правильным (Person является дочерним для Persons).

Ситуация Capris разрешается путем итерации по всем элементам Capris и создания <td> длякаждый настоящий элемент. Вы можете увидеть это, посмотрев на границы элементов.

Осталось исправить только один элемент xsl:sort. Он пытается отсортировать по значению элемента <Persib>, которого нет в примере. Я думаю, что вы можете исправить это самостоятельно.

<xsl:template match="/Persons">   
    <html>
        <body>
            <table border="1">
                <tr bgcolor="yellow"> 
                    <td><b>Shirts</b></td>
                    <td><b>Shorts</b></td>
                    <td><b>Capris</b></td>
                    <td><b>Capris</b></td>
                    <td><b>Capris</b></td>
                </tr>
                <xsl:for-each select="Person">
                    <xsl:sort select="Persib" />
                    <tr style="font-size: 10pt; font-family: verdana">
                        <td>
                            <xsl:value-of select="Shirts"/>
                        </td>
                        <td>
                            <xsl:value-of select="Pants/Jeans/Shorts"/>
                        </td>

                        <xsl:for-each select="Pants/Jeans/Capris">
                            <td>
                                <xsl:value-of select="." />
                            </td>
                        </xsl:for-each>
                    </tr>
                </xsl:for-each>
            </table>
        </body>
    </html>
</xsl:template>

Вывод должен быть по желанию.

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