3

私は XSLT に取り組んでいます。そこでは、2 つの xml 間をトラバースし、任意のタグの下に xml 全体をコピーする必要があります。

メイン XML:

    <Content xmlns="some name space">
    <message>abcd/<message>
    <group xlink:href="Some link"></group>

    </Content>

リンクされた XML:

    <Content xmlns="linked xml name space">

        <text>
                <strong xmlns="http://www.w3.org/1999/xhtml">Hello</strong>


                    <br xmlns="http://www.w3.org/1999/xhtml"></br>

            1. Hi

                    <br xmlns="http://www.w3.org/1999/xhtml"></br>

            2. Hi all

                    <br xmlns="http://www.w3.org/1999/xhtml"></br>

            3. Bye
        </text>
    </Content>

指定された xml 要素の下にある xml 構造全体を取得したい。

必要な出力。

    <AAA>
        <msg>abcd</msg>
        <data>
            <strong xmlns="http://www.w3.org/1999/xhtml">Hello</strong>


                <br xmlns="http://www.w3.org/1999/xhtml"></br>

        1. Hi

                <br xmlns="http://www.w3.org/1999/xhtml"></br>

        2. Hi all

                <br xmlns="http://www.w3.org/1999/xhtml"></br>

        3. Bye
        </data>
    </AAA>

書かれた XSLT:

        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:simple="some name space" xmlns:link="linked xml name space" xmlns:xlink="http://www.w3.org/1999/xlink"  xmlns:xh="http://www.w3.org/1999/xhtml">
          <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
          <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
            <xsl:template match="/">
            <xsl:apply-templates />
          </xsl:template>

           <xsl:template match="simple:Content">
           <AAA>
                <msg>
                      <xsl:apply-templates select="simple:key" />
                </msg>
                <xsl:variable name="LINKED_COMPONENT" select="simple:group/document(@xlink:href)" />

                <data>
                    <xsl:apply-templates select="$LINKED_COMPONENT//link:text"/>
                </data>
            </AAA>
         </xsl:template>

            <xsl:template match="*">
            <xsl:copy>
              <!-- descend -->
              <xsl:apply-templates />
            </xsl:copy>
          </xsl:template>

          </xsl:stylesheet>

出力を得た:

       <AAA>
            <msg>abcd</msg>
            <data>
               <text xmlns="linked xml name space">
                <strong xmlns="http://www.w3.org/1999/xhtml">Hello</strong>


                    <br xmlns="http://www.w3.org/1999/xhtml"></br>

            1. Hi

                    <br xmlns="http://www.w3.org/1999/xhtml"></br>

            2. Hi all

                    <br xmlns="http://www.w3.org/1999/xhtml"></br>

            3. Bye
            </text>
            </data>
        </AAA>

「テキスト」タグもここにコピーされます。これらのタグをコピーしたくありません。

誰でもそれを修正するのを手伝ってもらえますか。

4

1 に答える 1

1

Just change:

<xsl:apply-templates select="$LINKED_COMPONENT//link:text"/>

to:

<xsl:apply-templates select="$LINKED_COMPONENT//link:text/node()"/>
于 2012-05-29T13:02:25.930 に答える