根据子项的值获取父节点的XSLT是什么?
我的xml:
<cast>
<character>
<name>Bugs</name>
<id>1</id>
</character>
<character>
<name>Daffy</name>
<id>2</id>
</character>
我试过这个:
<xsl:template match="/cast/character/id">
<xsl:if test="text()=1">
<xsl:apply-templates select="../self" mode='copier'/>
</xsl:if>
</xsl:template>
<xsl:template match="*" mode='copier'>
<xsl:apply-templates />
</xsl:template>
但是这会输出文档中每个节点的文本。
编辑:我必须在这里输出XML,我打算将其扩展到XML生成
答案 0 :(得分:1)
我相信您正在打印所有内容,因为处理器在根目录开始匹配,而您指定的唯一模板是id
元素,因此默认情况下会复制内容。试试这个:
<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
<output method="text" />
<template match="/">
<apply-templates select="//id" />
</template>
<template match="id">
<if test="text()='1'">
<value-of select=".." />
</if>
</template>
</stylesheet>
或者,如果您只想要字符名称,则可以将select
元素中的value-of
属性值替换为“../name
”。
答案 1 :(得分:1)
只需使用:
<xsl:apply-templates select="/*/character[id=1]"/>
或者,如果只需复制所需节点而不进行进一步处理:
<xsl:copy-of select="/*/character[id=1]"/>
答案 2 :(得分:0)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/cast/character">
<xsl:if test="id=1">
<xsl:copy-of select="." />
</xsl:if>
</xsl:template>
</xsl:stylesheet>
无法添加评论。因此把它放在这里