【问题标题】:Nested for-each loops in getting issue in XSLT在 XSLT 中出现问题的嵌套 for-each 循环
【发布时间】:2016-05-19 13:30:24
【问题描述】:

我们在 xslt 中遇到了一个问题,我们正在尝试执行嵌套的 for-each,但它不读取内部循环。这是我们尝试过的代码:

XML 文件:

 <Rowsets>
    <Rowset>
    <Row>
    <name>BRH</name>
    <desc>---</desc>
    <values>
    <value>
    <from>01/18/2016 16:46:50</from>
    <to>01/18/2016 16:46:53</to>
    <label>MPA000000032</label>
    </value>
                <value>
    <from>01/04/2016 19:51:57</from>
    <to>01/13/2016 19:52:00</to>
    <label>MPA000000014</label>
    </value>

    </values>
            </Row>        
        </Rowset>
    </Rowsets> 

xslt 文件:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"  />
   <xsl:template match="/Rowsets">
      <xsl:for-each select="Rowset/Row">
         {"name":"<xsl:value-of select="name" />",
      "desc":" (<xsl:value-of select="desc" />)",

       "values" : [  { <xsl:for-each select="Row/values/value">
                "from" : " /Date(<xsl:value-of select="from" />)/",
         "to" : " /Date(<xsl:value-of select="to" />)/",
         "label" : "<xsl:value-of select="label" />"        

}</xsl:for-each><xsl:if test="./following-sibling::values">,</xsl:if></xsl:for-each>]  
} <xsl:if test="./following-sibling::Row">,</xsl:if></xsl:for-each>

      </xsl:template>
</xsl:stylesheet> 

预期的 JSON:

{
  "Rowsets": {
    "Rowset": {
      "Row": [
        {
          "name": "BRH",
          "desc": "---",
          "values": [
            {
              "from": "01/18/2016 16:46:50",
              "to": "01/18/2016 16:46:53",
              "label": "MPA000000032"
            },
            {
              "from": "01/04/2016 19:51:57",
              "to": "01/13/2016 19:52:00",
              "label": "MPA000000014"
            },
            {
              "from": "01/05/2016 13:24:46",
              "to": "01/17/2016 13:24:52",
              "label": "MPA000000029"
            },
            {
              "from": "01/11/2016 16:29:28",
              "to": "01/20/2016 16:29:30",
              "label": "MPA000000008"
            },
            {
              "from": "01/18/2016 12:05:21",
              "to": "01/27/2016 12:05:26",
              "label": "MPA000000036"
            }
          ]
        },
        {
          "name": "ROW-Q103-G2",
          "desc": "Salbatica 1",
          "values": {
            "from": "07/29/2015 09:00:00",
            "to": "07/30/2015 09:00:00",
            "label": "P0007"
          }
        }
      ]
    }
  }
} 

【问题讨论】:

  • 在您的第一个for-each 中,当前节点是&lt;Row&gt; 元素。由于您在嵌套的 for-each (Row/values/value) 中再次指定它,因此它仅在您的 &lt;Row&gt; 元素也有 &lt;Row&gt; 元素作为子元素时才有效,但事实并非如此。 values/value 应该足够了。
  • @FredericHamidi,这应该是一个答案而不是评论。

标签: jquery xml xslt


【解决方案1】:

你需要改变

<xsl:for-each select="Row/values/value"

<xsl:for-each select="values/value"

如果Row 元素本身包含Row 元素,则您编写它的方式将起作用。 IE。上下文节点已经是Row;您不需要在样式表中再次选择它。

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多