2

私はxslが初めてで、助けが必要です:(。親ノートの値として子ノードを取得する必要があります。

<planet>
    <venus> sometext 
        <mass>123</mass>
    </venus> 
    <mars>text about mars</mars>
</planet>

したがって、次の形式で取得する必要があります。

<venus>sometext
    <mass>123</mass>
</venus>
<mars> text about mars <mars>

コンパイルはノードが親メモの内容であると判断するため、ノードは記号「<」および「>」内にある必要があります。ありがとう!!!

4

2 に答える 2

2
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

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

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
于 2012-06-12T11:25:18.090 に答える
2

この変換:

<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()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="planet">
  <xsl:apply-templates/>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<planet> 
    <venus> sometext  
        <mass>123</mass> 
    </venus>  
    <mars>text about mars</mars> 
</planet>

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

<venus> sometext
        <mass>123</mass>
</venus>
<mars>text about mars</mars>

2番目の解決策 - より直接的で短い

<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="/*">
     <xsl:copy-of select="node()"/>
 </xsl:template>
</xsl:stylesheet>

説明:

どちらのソリューションでも、要素ツリーのルートのコピーを回避し、そのサブツリーをコピーします。

最初の解決策では、サブツリーのコピーは同一性規則の効果です。これにより、将来計画を変更し、単にサブツリーのノードをコピーするだけでなく、それらの一部またはすべてを変換することを決定した場合でも、柔軟性が向上します。 .

2 番目のソリューションでは、コピーは 1 つの XSLT 命令で行われます -- <xsl:copy-of>。ここでは、速度とコンパクトさのために柔軟性を犠牲にしています。

于 2012-06-12T12:07:48.100 に答える