如何处理链接到另一个xml的xml,并复制给定元素下的整个xml结构

时间:2012-05-29 09:23:19

标签: xslt xpath xslt-1.0

我正在研究XSLT,我必须遍历两个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>

“text”标签也会在这里复制。我不想复制这些标签。

任何人都可以帮我纠正。

1 个答案:

答案 0 :(得分:1)

只需更改

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

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