复制根元素的所有子元素,给定元素除外
Copy all the sub elements of a root element except a given element
我是 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>
XSLT 1.0
我不确定我是否理解你。但是如果你要得到的xml是你的post最后的那个,你可以使用:
<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 的状态元素。
或者简单地说:
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>
我是 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>
XSLT 1.0
我不确定我是否理解你。但是如果你要得到的xml是你的post最后的那个,你可以使用:
<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 的状态元素。
或者简单地说:
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>