2011-09-07 30 views
3

我們如何工會或2的XPath之間執行的foreach simulatenouslyXSLT工會或執行的foreach 2個不同節點

<Country> 
<States> 
    <State> 
     <name>1</name> 
     <id>California</id> 
    </State> 
    <State> 
     <name>2</name> 
     <id>Texas</id> 
    </State> 
    <State> 
     <name>3</name> 
     <id>New York</id> 
    </State> 
</States> 
<Cities> 
    <City> 
     <name>3</name> 
     <id>SFO</id> 
    </City> 
    <City> 
     <name>4</name> 
     <id>SAN DIEGO</id> 
    </City> 
    <City> 
     <name>5</name> 
     <id>ORLANDO</id> 
    </City> 
</Cities> 

我想通過這兩個國家和國家循環和獲取名稱和ID。

回答

4

使用XPath聯合操作|

/*/States/State | /*/Cities/City 

這裏選擇都是State元素是XML文檔的頂級元素的孩子的孩子們都State元素,也所有City元素它們是所有Cities元素的子元素,它們是XML文檔頂部元素的子元素。

在XSLT一個可以指定匹配多個類型的節點,再次使用...中的XPath工會模板(「|」)運算符爲匹配模式的一部分:

<xsl:template match=""City | State">

此模板規則匹配任何CityState元素。

最後,這裏是輸出的任何CityState名和ID的徹底轉變:

<Country> 
    <States> 
     <State> 
      <name>1</name> 
      <id>California</id> 
     </State> 
     <State> 
      <name>2</name> 
      <id>Texas</id> 
     </State> 
     <State> 
      <name>3</name> 
      <id>New York</id> 
     </State> 
    </States> 
    <Cities> 
     <City> 
      <name>3</name> 
      <id>SFO</id> 
     </City> 
     <City> 
      <name>4</name> 
      <id>SAN DIEGO</id> 
     </City> 
     <City> 
      <name>5</name> 
      <id>ORLANDO</id> 
     </City> 
    </Cities> 
</Country> 
:當這種轉變是在所提供的XML文檔應用

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="City | State"> 
    <xsl:copy-of select="*"/> 
</xsl:template> 

<xsl:template match="text()"/> 
</xsl:stylesheet> 

想要的,正確的結果產生

<name>1</name> 
<id>California</id> 
<name>2</name> 
<id>Texas</id> 
<name>3</name> 
<id>New York</id> 
<name>3</name> 
<id>SFO</id> 
<name>4</name> 
<id>SAN DIEGO</id> 
<name>5</name> 
<id>ORLANDO</id>