我有这个xml:
<Row>
<one>1</one>
<two>2</two>
<three>3</tree>
<four>4</four>
<five>5</five>
<six>6</six>
<seven>7</seven>
<...
<...
<...
<...
<...
</Row>
我希望将一个两个标签分组到主标签中,其余所有(可能是其中一百个)组合到其他标签中:
预期结果:
<Row>
<main>
<one>1</one>
<two>2</two>
<main>
<others>
<three>3</tree>
<four>4</four>
<five>1</five>
<six>2</six>
<seven>3</seven>
<...
<...
<...
<...
<...
<others>
</Row>
我的xslt是:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Row">
<main>
<xsl:apply-templates select="one|two"/>
</main>
<others>
<xsl:apply-templates select="node()|@*"/>
</others>
</xsl:template>
但是我对另一个标签也是一个和两个,我想要一个和两个只在主标签中。
答案 0 :(得分:0)
您在一个和两个上应用模板两次。首先明确地说,在第二场比赛中隐含第二:node()| @ *。 只需从第二场比赛中筛选出来。 这个xpath应该可以完成这项工作(没有经过测试,我早上太早了):
<xsl:template match="Row">
<main>
<xsl:apply-templates select="one|two"/>
</main>
<others>
<!-- No need to apply on attributes (@*),
unless you explicitely want to add rows attributes to others element.-->
<xsl:apply-templates select="node()[not(name()='one' or name()='two')]"/>
</others>
</xsl:template>