簡體   English   中英

XML 轉表<for-each></for-each>

[英]XML to Table <for-each>

我正在嘗試將以下內容轉換為表格,但我很難理解它是如何解析所有子節點的。 它會通過每個元素 go 直到最后一個元素,還是我需要為每個父節點設置一個 for-each ? 此外,如果允許多次出現“capris”,我是否需要為每個可能出現的單元格設置單元格(例如,如果最多有 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>

您的xsl:for-each匹配規則錯誤。
使用以下模板:它匹配根<Persons>元素,創建<html><body>元素以及<table>

最后,它使用xsl:for-each遍歷<Person>元素。 這是可行的,因為上下文節點是正確的( PersonPersons的子節點)。

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>

output 應符合要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM