2010-07-22 70 views
3

我这里有一个XML文件:如何使用XSLT的索引选择指定的元素?

<DM_Function Function="attribute value"> 
    <DM> 
    <DM_Source SourceID="id1" SourceTitle="Title1" SourceContent="content1"> 
    </DM_Source> 
    </DM> 
    <DM> 
    <DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2"> 
    </DM_Source> 
    </DM> 
    <DM> 
    <DM_Source SourceID="id3" SourceTitle="Title3" SourceContent="content3"> 
    </DM_Source> 
    </DM> 
</DM_Function> 

XSLT文件中,有一个变量:

<xsl:param name="dmIndex" select="2" /> 

我想将XML文件转换成another.The变量是元素的索引,我希望另一个XML文件只显示Root元素和指定的元素(包括属性)。

+0

好问题(+1)。看到我的答案是一个简短而完整的解决方案。 – 2010-07-22 03:20:40

回答

0

这种转变

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:param name="dmIndex" select="2" /> 

<xsl:template match="/*"> 
    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
     <xsl:copy-of select="DM[$dmIndex]"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

时所提供的XML文档应用:

<DM_Function Function="attribute value"> 
    <DM> 
    <DM_Source SourceID="id1" SourceTitle="Title1" SourceContent="content1"> 
    </DM_Source> 
    </DM> 
    <DM> 
    <DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2"> 
    </DM_Source> 
    </DM> 
    <DM> 
    <DM_Source SourceID="id3" SourceTitle="Title3" SourceContent="content3"> 
    </DM_Source> 
    </DM> 
</DM_Function> 

产生想要的,正确的结果

<DM_Function Function="attribute value"> 
    <DM> 
     <DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2"/> 
    </DM> 
</DM_Function> 
+0

我明白了。非常感谢。 – 2010-07-22 10:57:42

+0

@ Howard-Jia:很高兴这很有用。那么如何接受我的答案(通过点击接近答案的复选标记)? :) – 2010-07-22 12:35:32

+0

另外'select =“@ * | DM [$ dmIndex]”'将完成这项工作。 – 2010-07-22 23:33:02