我有一个XML文件:
<Picture id="001.png"/>
<Line/>
<Picture id="002.png"/>
<Line/>
<Picture id="003.png"/>
并希望将其更改为:
<Picture id="001.png"/>
<Line/>
<Picture id="002.png"/>
我可以通过以下xsl删除“003.png”,因为我知道它的id,但不知道如何删除它上面的“Line”。
<xsl:template
match="//Picture[@id='003.png']">
</xsl:template>
我可以通过跟随兄弟来实现吗? 非常感谢:))
答案 0 :(得分:0)
您的输入不是格式良好的XML,因为它没有根元素,但这里有一个选项:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Identity transform -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!--
Drop unwanted elements: <Picture id="003.png"/> and the <Line/> element
preceding it
-->
<xsl:template
match="Line[following-sibling::*[1][self::Picture[@id = '003.png']]]
| Picture[@id = '003.png']"/>
</xsl:stylesheet>
<Elements>
<Picture id="001.png"/>
<Line/>
<Picture id="002.png"/>
<Line/>
<Picture id="003.png"/>
</Elements>
<Elements>
<Picture id="001.png"/>
<Line/>
<Picture id="002.png"/>
</Elements>
答案 1 :(得分:0)
是的,您可以通过以下兄弟来完成。从Eero Helenius更改代码如下。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Identity transform -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!--
Drop unwanted elements: <Line> with fist following-sibling::Picture id = '003.png
<Picture id="003.png"/>
-->
<xsl:template match="Picture[@id = '003.png']"/>
<xsl:template match="Line">
<xsl:if test="not(following-sibling::Picture[1][@id = '003.png'])">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>