我是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>
我需要打印所有&#39;状态&#39; &#39; bag&#39;的元素与所有其他元素一样。没有工装类型或除袋子外的任何其他类型的状态。如果你能帮助我写xslt以满足我的要求,我将不胜感激。 输出XML如下所述。应打印状态,结果,计数,过滤状态,页面。
<statuses>
<result>name</result>
<count>12</count>
<status>
<stockNo>1000</stockNo>
<itemNo>500</itemNo>
<name>bag</name>
</status>
<gage>3</gage>
</statuses>
答案 0 :(得分:0)
XSLT 1.0
我不确定我是否理解你。但是,如果你想获得的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文档,而不包含任何名称不是包的状态元素。
答案 1 :(得分: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>