Xslt 跳过子元素
我想从以下xml中跳过子元素Xslt 跳过子元素,xslt,Xslt,我想从以下xml中跳过子元素 <person id="101"> <name>XYZ</name> <last-name>XXX</last-name> </person> <person id="101"> <name>YYY</name> <last-name>BBB</last-name> </person> X
<person id="101">
<name>XYZ</name>
<last-name>XXX</last-name>
</person>
<person id="101">
<name>YYY</name>
<last-name>BBB</last-name>
</person>
XYZ
XXX
YYY
BBB
假设我想跳过姓氏,这是我的代码
<xsl:template match="/">
<xsl:apply-templates select="//person [not(last-name)]" />
</xsl:template>
<xsl:template match="person">
<xsl:copy-of select="." />
<xsl:text>
</xsl:text>
</xsl:template>
;
上面的代码跳过具有姓氏元素的all-person元素
有人能帮我写这段代码吗
谢谢“跳过姓氏”我想您希望您的输出如下所示:
<person id="101">
<name>XYZ</name>
</person>
<person id="101">
<name>YYY</name>
</person>
<xsl:template match="/">
<xsl:apply-templates select="//person"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="last-name">
<!-- Do nothing, you don't want to copy this. -->
</xsl:template>
我认为您误解了XPath表达式的工作原理。您的表达式//person[not(last name)]
正在选择与条件not(last name)
匹配的所有person
元素,这意味着它匹配没有子last name
元素的任何person
元素。它的行为与应有的完全一致。输入正确:
<root>
<person id="101">
<name>XYZ</name>
<last-name>XXX</last-name>
</person>
<person id="101">
<name>YYY</name>
<last-name>BBB</last-name>
</person>
</root>
XYZ
XXX
YYY
BBB
此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="last-name"/>
</xsl:stylesheet>
产生我认为理想的结果:
<root>
<person id="101">
<name>XYZ</name>
</person>
<person id="101">
<name>YYY</name>
</person>
</root>
XYZ
YYY
注意:身份转换。空模板以剥离节点。请不要推荐以
/
开头的表达式,因为它们效率很低。@jason4:你很好!此外,为了帮助其他人,请编辑您的问题,并明确表示您要删除姓氏
元素。