我是xslt转换的新手。 我需要打印除给定元素以外的所有子元素。 这是我的xslt:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <statuses>
            <xsl:for-each select="statuses">
                <xsl:variable name='test1' select="status[name='bag']">
                </xsl:variable>

    <xsl:copy-of select="$test1" />
            </xsl:for-each></statuses>
        </xsl:template>
    </xsl:stylesheet>

输入XML在下面提到。 根元素是状态。

<statuses>
    <result>name</result>
<count>12</count>
        <status>
            <stockNo>1000</stockNo>
            <itemNo>500</itemNo>
            <name>frock</name>
        </status>
<status>
                <stockNo>1000</stockNo>
                <itemNo>500</itemNo>
                <name>bag</name>
            </status>
<gage>3</gage>
</statuses>

我需要将“ bag”的所有“ status”元素与所有其他元素一起打印。 没有服装类型或除袋装以外的任何其他类型的状态。 如果您能帮助我编写xslt以满足我的要求,我将不胜感激。 输出XML在下面提到。 状态,结果,计数,已过滤状态,页面应打印出来。

<statuses>
        <result>name</result>
    <count>12</count>
    <status>
                    <stockNo>1000</stockNo>
                    <itemNo>500</itemNo>
                    <name>bag</name>
                </status>
    <gage>3</gage>
</statuses>

===============>>#1 票数:0 已采纳

XSLT 1.0

我不确定我是否理解你。 但是,如果要获取的xml是帖子末尾的xml,则可以使用:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" encoding="utf-8" indent="yes"/>

    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="node()">
        <xsl:copy>
            <xsl:apply-templates select="node()" />
        </xsl:copy>
    </xsl:template>


    <xsl:template match="status" >

        <xsl:if test="name = 'bag'">
            <status>
            <xsl:apply-templates />
        </status>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>

这应该重新打印您的xml文档,而没有任何名称不是bag的状态元素。

===============>>#2 票数:0

或者简单地:

XSLT 2.0

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

<xsl:template match="*">
    <xsl:copy>
        <xsl:apply-templates select="node() except status[name!='bag']"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

或者,如果您正在使用XSLT 1.0,则很显然(尽管已将问题标记为XSLT 2.0):

<xsl:template match="*">
    <xsl:copy>
        <xsl:apply-templates select="node()[not(self::status[name!='bag'])]"/>
    </xsl:copy>
</xsl:template>

  ask by roja derman translate from so

未解决问题?本站智能推荐: