我有一些带有重复标记名称的xml XML文档,如下面的::
<ROOT>
<RECORD>
<ID>A1</ID>
<NAME>Name1</NAME>
<ADDRESS>StreetName</ADDRESS>
<ADDRESS>CityName</ADDRESS>
<ADDRESS>State</ADDRESS>
<ADDRESS>321</ADDRESS>
<PHONE>12345</PHONE>
</RECORD>
<RECORD>
<ID>A1</ID>
<NAME>Name1</NAME>
<ADDRESS>StreetName</ADDRESS>
<ADDRESS>CityName</ADDRESS>
<ADDRESS>State</ADDRESS>
<ADDRESS>123</ADDRESS>
<PHONE>12345</PHONE>
</RECORD>
</ROOT>
所以我必须获得总地址,但是当我申请XSLT时,我只获得第一个标记值。 是否有可能将ADDRESS标记名称更改为适当的标记名称,如STREET,CITY,STATE和ZIP标记。
答案 0 :(得分:2)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<my:reps>
<rep pos="1">STREET</rep>
<rep pos="1">CITY</rep>
<rep pos="1">STATE</rep>
<rep pos="1">ZIP</rep>
</my:reps>
<xsl:variable name="vReps"
select="document('')/*/my:reps/*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ADDRESS">
<xsl:variable name="vPos" select=
"count(preceding-sibling::ADDRESS)+1"/>
<xsl:element name="{$vReps[position()=$vPos]}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<ROOT>
<RECORD>
<ID>A1</ID>
<NAME>Name1</NAME>
<ADDRESS>StreetName</ADDRESS>
<ADDRESS>CityName</ADDRESS>
<ADDRESS>State</ADDRESS>
<ADDRESS>321</ADDRESS>
<PHONE>12345</PHONE>
</RECORD>
<RECORD>
<ID>A1</ID>
<NAME>Name1</NAME>
<ADDRESS>StreetName</ADDRESS>
<ADDRESS>CityName</ADDRESS>
<ADDRESS>State</ADDRESS>
<ADDRESS>123</ADDRESS>
<PHONE>12345</PHONE>
</RECORD>
</ROOT>
生成想要的正确结果:
<ROOT>
<RECORD>
<ID>A1</ID>
<NAME>Name1</NAME>
<STREET>StreetName</STREET>
<CITY>CityName</CITY>
<STATE>State</STATE>
<ZIP>321</ZIP>
<PHONE>12345</PHONE>
</RECORD>
<RECORD>
<ID>A1</ID>
<NAME>Name1</NAME>
<STREET>StreetName</STREET>
<CITY>CityName</CITY>
<STATE>State</STATE>
<ZIP>123</ZIP>
<PHONE>12345</PHONE>
</RECORD>
</ROOT>
<强>解释强>:
使用匹配ADDRESS
的模板覆盖标识规则,并根据此ADDRESS
元素的位置生成元素。
答案 1 :(得分:0)
是的,您可以根据需要更改名称,但不会提供您尚未拥有的任何内容。拥有名称街道城市状态与获取节点没有什么不同 地址[1],地址[2],地址[3]