Используйте оператор объединения XPath : |
/*/States/State | /*/Cities/City
Выбирает все элементы State
, которые являются дочерними элементами всех элементов State
, которые являются дочерними элементами верхнего элементаXML-документа , а также все City
элементы, которые являются дочерними элементами всех Cities
элементов, которые являются дочерними элементами верхнего элемента XML-документа.
В XSLT одинможно указать шаблон, который соответствует нескольким типам узлов, используя снова ... оператор объединения XPath ('|') как часть шаблона соответствия:
<xsl:template match=""City | State">
Это шаблонное правило соответствует любому элементу 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>
желаемый, правильный результат получается :
<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>