我正在研究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”标签也会在这里复制。我不想复制这些标签。
任何人都可以帮我纠正。
答案 0 :(得分:1)
只需更改:
<xsl:apply-templates select="$LINKED_COMPONENT//link:text"/>
以强>:
<xsl:apply-templates select="$LINKED_COMPONENT//link:text/node()"/>