任何人都可以帮助我获得正确的Xpath以便通过xslt进行适当的转换吗?
[当我尝试通过xpath (document(input.xml)//track)
使用xslt转换input.xml时,获得期望的输出,如下所述。
input xml:,如下所示
<mergingTracksBreakdownStructure>
<track id="10">
<mergedTrack id="10"/>
<mergedTrack id="11"/>
<mergedTrack id="12"/>
<track id="13">
<mergedTrack id="13"/>
<mergedTrack id="14"/>
<track id="15">
<mergedTrack id="15"/>
<mergedTrack id="16"/>
</track>
</track>
</track>
<track id="27">
<mergedTrack id="27"/>
</track>
<track id="30">
<mergedTrack id="30"/>
</track>
</mergingTracksBreakdownStructure>
需要输出xml:,如下所示
<mergingTracksBreakdownStructure>
<track id="10">
<mergedTrack id="10"/>
<mergedTrack id="11"/>
<mergedTrack id="12"/>
</track>
<track id="13">
<mergedTrack id="13"/>
<mergedTrack id="14"/>
</track>
<track id="15">
<mergedTrack id="15"/>
<mergedTrack id="16"/>
</track>
<track id="27">
<mergedTrack id="27"/>
</track>
<track id="30">
<mergedTrack id="30"/>
</track>
</mergingTracksBreakdownStructure>
用于转换的XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:result-document href="output.xml" method="xml">
<xsl:apply-templates select="document('input.xml')//track"/>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
通过将以下样式表应用于输入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:template match="/mergingTracksBreakdownStructure">
<xsl:copy>
<xsl:apply-templates select="track"/>
</xsl:copy>
</xsl:template>
<xsl:template match="track">
<xsl:copy>
<xsl:copy-of select="@* | mergedTrack"/>
</xsl:copy>
<xsl:apply-templates select="track"/>
</xsl:template>
</xsl:stylesheet>