3

XSLTが入力XMLをまだ存在しない場合にのみ、親ノード内でラップさせるにはどうすればよいですか?

たとえば、私の入力が次の場合:

<Project>...</Project>

接頭辞と接尾辞でラップしたい:

<?xml version "1.0" encoding="utf-8">
<Site>
  <Project>...</Project>
</Site>

ただし、<Project>が入力のルートノードでない場合は、入力を変更しないでおく必要があります。

前もって感謝します!

4

3 に答える 3

4

このスタイルシート:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()" name="identity">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="/Project">
        <Site>
            <xsl:call-template name="identity"/>
        </Site>
    </xsl:template>
</xsl:stylesheet>

入力1:

<Project>...</Project>

出力1:

<Site>
    <Project>...</Project>
</Site>

入力2:

<Root>
    <Project>...</Project>
</Root>

出力2:

<Root>
    <Project>...</Project>
</Root>

:アイデンティティ変換。パターンマッチング

于 2010-07-29T12:41:45.123 に答える
1

この変換

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

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

 <xsl:template match="*[not(self::site)]/Project">
  <site>
    <xsl:call-template name="identity"/>
  </site>
 </xsl:template>
</xsl:stylesheet>

<Project>要素がまだ要素の子ではない場合にのみ、要素をラップし<site>ます。

このXMLドキュメントに適用した場合

<t>
  <Project>x</Project>
    <site>
      <Project>y</Project>
    </site>
</t>

正しい、必要な結果が生成されます:

<t>
   <site>
      <Project>x</Project>
   </site>
   <site>
      <Project>y</Project>
   </site>
</t>
于 2010-07-29T12:58:15.197 に答える
0

プレフィックスとサフィックスのみを追加することが要件である場合は、これをはるかに簡単に実行できるgrepなどの他のUnixオプションを探すことができます。XSLでこれを実行する場合は、xsl:whenを使用する必要があります。

<xsl:template match="/">
         <xsl:choose>       <!-- If Node Period exists add the text -->         <xsl:when test="Period">
                        <xsl:text><Site></xsl:text>
                        <xsl:text>&#xa;</xsl:text>
                        <xsl:text><Site></xsl:text>
            </xsl:when>     </xsl:choose>   <xsl:apply-templates select="Notification"/> </xsl:template>
于 2010-07-29T06:48:57.037 に答える