3

我正在研究 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>

“文本”标签也复制到这里。我不想复制那些标签。

任何人都可以帮我纠正它。

4

1 回答 1

1

只需更改

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

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