我们如何在 2 个 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>
Run Code Online (Sandbox Code Playgroud)
我想遍历国家和州并获取名称和 ID。
使用 XPath 联合运算符:|
/*/States/State | /*/Cities/City
Run Code Online (Sandbox Code Playgroud)
这所有的选择State是所有的子元素State是XML文档的顶级元素的子元素,也全部City是所有的子元素Cities是XML文档的顶级元素的子元素。
在 XSLT 中,可以指定一个模板来匹配不止一种类型的节点,再次使用 ... XPath 联合 ('|') 运算符作为匹配模式的一部分:
<xsl:template match=""City | State">
此模板规则匹配任何City或State元素。
最后,这是一个完整的转换,它输出 any Cityor的名称和 ID 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>
Run Code Online (Sandbox Code Playgroud)
当此转换应用于提供的 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>
Run Code Online (Sandbox Code Playgroud)
产生了想要的、正确的结果:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4199 次 |
| 最近记录: |