是否有xpath仅用于获取这些值

问题描述 投票:0回答:1

任何人都可以帮助我获得正确的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>
xslt xsltforms
1个回答
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: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>
© www.soinside.com 2019 - 2024. All rights reserved.