我有一个xslt文件,如下所示;
<xsl:if test="/ItemList/Item/cx">
<kml:Circle>
</kml:Circle>
</xsl:if>
<xsl:if test="/ItemList/Item/Lon">
<kml:Point>
</kml:Point>
</xsl:if>
在如下所示的xml文件上执行xslt后,它会生成冗余标签,例如<kml:Point/>
和<kml:Circle/>
。但是我不想要这个标签。
示例XML文件
<ItemList>
<Item>
<Name>1</Name>
<Lon>66.406180329538</Lon>
<Lat>35.7185924672465</Lat>
</Item>
<Item>
<Name>2</Name>
<cx>1</cx>
<cy>2</cy>
<rx>3</rx>
<ry>4</ry>
</Item>
</ItemList>
在此文件上执行xslt之后,示例输出如下所示;
<kml:Placemark>
<kml:Circle cx="1" cy="2" r="3"/>
<kml:Point/>
</kml:Placemark>
<kml:Placemark>
<kml:Circle/>
<kml:Point>
<kml:coordinates>68.406180329538,35.7185924672465</kml:coordinates>
</kml:Point>
</kml:Placemark>
我的问题是,执行此xslt后,为什么会有像<kml:Point/>
和<kml:Circle/>
这样的节点。我不要这个多余的节点。
感谢您的帮助
答案 0 :(得分:0)
此XPath表达式/ItemList/Item/cx
是absolute location path,它不依赖于与您的转换规则匹配的上下文节点。简而言之,它将始终选择相同的节点,因此它将始终具有相同的布尔值。
因为您的输入文档同时具有cx
和Lon
元素(在不同分支中,但它们都存在),因此您的xsl:if
指令内容将得到处理。