0

私のxmlおよびxsltファイルは次のようになります。問題は、変換ファイルを適用すると、2 番目のファイルのみが発生し、1 番目のファイルがスキップされることです。最初の実行時に両方を実行するにはどうすればよいですか。助けてくださいありがとう。

//BEFORE TRANSFORMATION 

<A>
 <B>
  <Name>ThisOne</Name>
  <Target>abc</Target>
 </B>
</A>

私の XSLT ファイル

 <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

 <!--Transformation 1 to replace Target Text-->
  <xsl:template match="A/B/Target/text()">
    <xsl:text>xyz</xsl:text>  
  </xsl:template>

 <!--Transformation 2 to Add a new node after Target-->
  <xsl:template match="A/B/Target">
    <xsl:copy-of select="."/>
    <JOJO></JOJO>
  </xsl:template>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>  
</xsl:stylesheet>

変換後に見たいものは次のとおりです

<A>
 <B>
  <Name>ThisOne</Name>
  <Target>xyz</Target>
  <JOJO/>
 </B>
</A>
4

2 に答える 2

0

変化する

<xsl:template match="A/B/Target">
    <xsl:copy-of select="."/>
    <JOJO></JOJO>
  </xsl:template>

<xsl:template match="A/B/Target">
    <xsl:copy>
       <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
    <JOJO></JOJO>
  </xsl:template>
于 2013-10-09T19:48:25.853 に答える
0

1 つのテンプレートを使用して B ノードを書き換えることができます。これら 2 つのテンプレートを次のように置き換えます。

<xsl:template match ="A/B">
    <B>
        <Name><xsl:value-of select="Name"/></Name>
        <Target>xyz</Target>
        <JOJO/>
    </B>
</xsl:template>
于 2013-10-09T20:03:15.350 に答える