首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将模板应用于具有属性的子节点。

将模板应用于具有属性的子节点。
EN

Stack Overflow用户
提问于 2011-04-20 18:48:41
回答 1查看 2K关注 0票数 3

我想将模板应用于具有指定属性的子节点,我很好奇是否可以使用<template match=...

所以如果我有一个输入xml

代码语言:javascript
复制
<?xml version="1.0"?>
<parent-node>
    <child-node>
        <label>value1</label>
        <name>name1</name>
        <desc src="anything">description1</desc>
    </child-node>
    <child-node>
        <label>value2</label>
        <desc>description2</desc>
    </child-node>
    <some-node>
        <name>name3</name>
        <desc src="something">description3</desc>
    </some-node>
</parent-node>

所需的模板将应用于具有定义了desc属性的src子节点的节点,例如。第一个和最后一个节点:

代码语言:javascript
复制
<child-node>
    <label>value1</label>
    <name>name1</name>
    <desc src="anything">description1</desc>
</child-node>
<some-node>
    <name>name3</name>
    <desc src="something">description3</desc>
</some-node>

到目前为止,我所掌握的最好的是一个与具有desc子节点的节点匹配的模板,其余的(测试是否有任何desc节点有@src)在模板中,在xsl:choose子句中:

代码语言:javascript
复制
<xsl:template match="*[desc]">
    <xsl:choose>
        <xsl:when test="desc[@src]">
            <xsl:element name="node-with-src">
                [...]
            </xsl:element>
        </xsl:when>
        <xsl:otherwise>
            <xsl:element name="node">
                [...]
            </xsl:element>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

通过拥有这样一个模板,我可以离开这个模板中的otherwise部分,而且无论如何,这样做会更好。

谢谢您的每一个答复!

编辑我更喜欢1.0解决方案,但它不是标准。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-20 18:56:06

允许使用更复杂的(嵌套)谓词。用这个:

代码语言:javascript
复制
<xsl:template match="*[desc[@src]]">

以及没有src属性的节点的相应模板:

代码语言:javascript
复制
<xsl:template match="*[desc[not(@src)]]">

例如:

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="*[desc[@src]]"> 
        <xsl:element name="node-with-src"/>
    </xsl:template>
    <xsl:template match="*[desc[not(@src)]]">
        <xsl:element name="node"/>
    </xsl:template>
</xsl:stylesheet>

适用于:

代码语言:javascript
复制
<parent-node>
    <child-node>
        <label>value1</label>
        <name>name1</name>
        <desc src="anything">description1</desc>
    </child-node>
    <child-node>
        <label>value2</label>
        <desc>description2</desc>
    </child-node>
    <some-node>
        <name>name3</name>
        <desc src="something">description3</desc>
    </some-node>
</parent-node>

输出:

代码语言:javascript
复制
<node-with-src/>
<node/>
<node-with-src/>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5735138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档