0

xslt を使用して 2 つのルート タグと 1 つの名前空間を削除したい

<?xml version="1.0" encoding="UTF-8"?>
<sxi:Messages xmlns:sxi="http://sap.com/xi/XI/SplitAndMerge">
<sxi:Message1>
<ZDetails>
.
.
</ZDetails>
</sxi:Message1>
</sxi:Messages>

なりたい

<?xml version="1.0" encoding="UTF-8"?>
<ZDetails>
..
.
</ZDetails>

タグ n 間のデータは変更しないでください。いくつかの xslt コードを検索して結合しようとしましたが、ZDetails 間のいくつかの属性が削除されています。ということで新作投稿。それぞれのxsltコードで私を助けてくれる人はいますか?

4

2 に答える 2

1

これはそれを行う必要があります:

<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sxi="http://sap.com/xi/XI/SplitAndMerge">

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

  <xsl:template match="sxi:Messages">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="sxi:Message1">
    <xsl:apply-templates/>
  </xsl:template>

</xsl:stylesheet>

最初のテンプレートはすべてをコピーし、他の2つのテンプレートは要素sxi:Messagesxsi:Message1要素をスキップします-コンテンツをコピーします。

http://sap.com/xi/XI/SplitAndMerge名前空間内のすべての要素を削除する場合:

<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sxi="http://sap.com/xi/XI/SplitAndMerge">

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

  <xsl:template match="sxi:*">
    <xsl:apply-templates/>
  </xsl:template>

</xsl:stylesheet>
于 2012-10-09T15:22:24.970 に答える
1

<ZDetails>要素の下で何も変更しないことが保証されている簡単な方法を次に示します。

<xsl:stylesheet version="1.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <xsl:copy-of select="/*/*/ZDetails" />
  </xsl:template>

</xsl:stylesheet>

<ZDetails>テンプレートは、最も外側の要素の孫である要素とそのサブツリー全体を単純にコピーし、それ以外は無視します。

于 2012-10-09T16:12:50.770 に答える