麻烦通过XML节点循环

时间:2015-12-21 17:13:28

标签: xml loops xslt

我的xml

<INSPECTION_AREAS>

<AREA id="1" name="NorthWest Region">
<INSPECTION_SECTORS>
   <SECTOR id = "654" name = "Angola">
   </SECTOR>
   <SECTOR id = "852" name = "Lafouche">
       </SECTOR>
   <SECTOR id = "419" name = "Lake Borgne">
   </SECTOR>
</INSPECTION_SECTORS>
</AREA>

<AREA id="2" name="SouthWest Region"> 
<INSPECTION_SECTORS>
   <SECTOR id = "106" name = "Orleans">
   </SECTOR>
   <SECTOR id = "968" name = "Plaquemines">
       </SECTOR>
   <SECTOR id = "455" name = "Forty Arpent">
   </SECTOR>
</INSPECTION_SECTORS>
</AREA>

<AREA id="3" name="MidWest Region">
<INSPECTION_SECTORS>
   <SECTOR id = "698" name = "West End">
   </SECTOR>
   <SECTOR id = "232" name = "St. Bernard">
       </SECTOR>
   <SECTOR id = "768" name = "Grand Isle">
   </SECTOR>
</INSPECTION_SECTORS>

我正在尝试列出每个区域的每个扇区。当我尝试以下内容时:

<xsl:for-each select="//INSPECTION_AREAS/AREA">
     ----<xsl:value-of select="@name"></xsl:value-of>----<xsl:text>&#xa;</xsl:text>

我只获得了我的区域列表

----NorthWest Region----
----SouthWest Region----
----MidWest Region----

哪个好。当我尝试列出每个区域的扇区时,使用以下代码

<xsl:for-each select="//INSPECTION_AREAS/AREA">

     ----<xsl:value-of select="@name"></xsl:value-of>----<xsl:text>&#xa;</xsl:text>
     <xsl:for-each select=".//INSPECTION_AREAS/AREA/INSPECTION_SECTORS/SECTOR">
          <xsl:value-of select="@id"></xsl:value-of><xsl:text>&#xa;</xsl:text>
     </xsl:for-each>   

</xsl:for-each>

我得到了不同的区域,但每个区域都有相同的扇区列表。即...

----NorthWest Region----
 Angola
 Lafouche
 Lake Borgne
----SouthWest Region----
 Angola
 Lafouche
 Lake Borgne
----MidWest Region----
 Angola
 Lafouche
 Lake Borgne

我没有为每个不同的区域获得不同的部门。我不确定我在这里做错了什么。对此的任何帮助都会很棒。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在内循环中,&#34; context&#34;已经在正确的节点let newState = Object.assign({}, state); delete newState.c.y 。将内循环选择条件更改为相对XPath:

//INSPECTION_AREAS/AREA

但是,我强烈建议你仔细阅读&#34; pull&#34;处理(你正在做)和&#34;推&#34;处理,让您让XSLT引擎的自然功能为您完成迭代。一旦掌握了概念,通常使用起来就会简单得多。