Num*_*ats 5 xslt conditional attributes
我是一名经验丰富的程序员,但他是XSLT的新手,我发现它非常令人困惑.如果这是一个之前被问过的问题我很抱歉,但我对XSLT感到非常沮丧,我甚至不确定要搜索什么...
我有一个问题,如果某个XML元素只出现一次,我想要它的内容输出,但如果它多次出现,我只想要那些具有某个属性的内容.
例如,假设我有一个包含的XML文件(称为"文件1")
<food>
<snack>Chips</snack>
<snack type="nuts">Peanuts</snack>
</food>
Run Code Online (Sandbox Code Playgroud)
和另一个包含的XML文件("文件2")
<food>
<snack>Cheese puffs</snack>
</food>
Run Code Online (Sandbox Code Playgroud)
我需要一个XSLT,在处理文件1时只输出"Peanuts"(但不是"Chips"),但仍然为文件2输出"Cheese puffs"(即我不能只选择那些具有"type"属性的元素) , 那太简单了).
这可能很简单,但我被困了......
这种转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"*[snack/@type]/snack[not(@type)]"/>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
在这两种情况下都会产生想要的结果。
解释:
身份规则/模板“按原样”复制每个节点。
第二个模板将覆盖任何snack不带属性且type兄弟snack元素具有属性的元素的标识模板type。该模板具有空主体,可有效地从(复制到)输出中“删除”匹配的元素。
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |