我们如何在两个xpath之间同时合并或执行foreach
<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。 最佳答案
使用XPath联合运算符:|
/*/States/State | /*/Cities/City
这将选择所有
State
元素的所有State
元素,所有City
元素是XML文档顶部的子元素,也选择所有Cities
元素,它们是所有<xsl:template match=""City | State">
元素的子元素,而City
元素是XML文档的顶部元素。在XSLT中,可以再次指定一个模板,该模板与多种类型的节点匹配,再次使用...作为匹配模式的一部分,使用XPath联合('|')运算符:
State
此模板规则与任何
City
或State
元素匹配。最后是,这是一个完整的转换,可输出任何ojit_code或ojit_code的名称和ID:
<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>
所需的正确结果产生:
<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>