2011-09-07 2 views
3

에 대한 foreach 문을 실행하거나 simulatenously을 2 XPath를 사이에XSLT 조합 또는 우리에게 노동 조합을 할 방법이 개 서로 다른 노드

<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> 

내가 모두 국가와 국가를 통해 루프를 원하는 foreach 문을 실행하고 이름과 ID를 얻을.

답변

4

는 XPath 조합 연산자 사용 |

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

이 모든 State XML 문서 의 상위 요소의 자식 인 모든 State 요소의 하위 요소와도 모든 City 요소를 선택을 모든 Cities 요소의 하위이며 XML. 서의 맨 위 요소의 하위 요소입니다.

하나 ... 다시는 XPath 조합을 사용하여 노드 유형을 하나 이상 일치하는 템플릿을 지정할 수 있습니다 XSLT에서 | 운영자 ('') 일치 패턴의 일부로 :

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

이 템플릿 규칙은 City 또는 State 요소와 일치합니다.

<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> 

이 변환이 제공된 XML 문서에 적용된다 :

<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> 
마지막

여기 어떤 City 또는 State의 이름 및 번호를 출력하는 완료 변형이며

원하는 올바른 결과가 생성됩니다. :

<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> 
관련 문제