我有类似下面的xml。我想要开始和结束自我关闭标记标签之间的所有元素。忽略其余元素。我正试图在XSLT中做到这一点。
<catalog>
<cd>
<start/>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<end/>
</catalog>
答案 0 :(得分:0)
这个想法很简单:
rng1
变量,该变量包含start
之后的元素
(跟随轴)rng2
变量,该变量包含end
之前的元素
(之前的轴),但是要获得格式正确的XML输出,模板必须生成
“信封”,例如root
元素,然后生成其中的内容。
另一个细节:由于您不知道同时start
和end
的确切XPath,
XSLT代码必须从//
开始指定它们。
因此整个脚本如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:variable name="rng1" select="//start/following::*"/>
<xsl:variable name="rng2" select="//end/preceding::*"/>
<xsl:apply-templates select="$rng1 intersect $rng2"/>
</root>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>