尝试基于另一个xml元素的值更新一个xml元素的值
此网站的长期用户未注册。现在我发现了一个问题,虽然我确信它很容易解决,但我在任何搜索中都看不到任何相关材料 这个xml示例简化了我的问题:尝试基于另一个xml元素的值更新一个xml元素的值,xml,xslt,Xml,Xslt,此网站的长期用户未注册。现在我发现了一个问题,虽然我确信它很容易解决,但我在任何搜索中都看不到任何相关材料 这个xml示例简化了我的问题: <root_element> <content> <content-detail> <name>TV Show Name</name> <value> Father Ted </value> </content-detail> &l
<root_element>
<content>
<content-detail>
<name>TV Show Name</name>
<value> Father Ted </value>
</content-detail>
<content-detail>
<name>Airing Status</name>
<value> Cancelled </value>
</content-detail>
</content>
</root_element>
电视节目名称
泰德神父
晾晒状态
取消
在这个完全虚构的示例中,让我们假设我想编写一个XSL转换,将Ted父亲更新为“Ted父亲——取消”
我可以更新所有的电视节目名称,但是我很难让XSL理解,如果airingstatus的值被取消,它应该只更新电视节目名称值元素
请帮助我,我已经被困在这几个小时了 这将满足您的需要
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value[../name='TV Show Name']">
<value>
<xsl:choose>
<xsl:when test="../../content-detail[name='Airing Status']/value = ' Cancelled '">
<xsl:value-of select="."/>- Cancelled
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</value>
</xsl:template>
</xsl:stylesheet>
-取消
第一个模板是“身份转换”,它仅将输入复制到输出
第二个模板只匹配其名称为电视节目名称的值元素。它生成一个值
元素,其文本设置为所需字符串,具体取决于同一
块中播放状态
的值
注意:如果'Cancelled'
值周围的空格有任何变化,您可能需要调整测试。这里有一个面向推送的解决方案,在模板匹配方面更简单,并且可以处理值周围的任意数量的空格:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template
match="content[content-detail
[normalize-space(name) = 'Airing Status']
[normalize-space(value) = 'Cancelled']
]
/content-detail[normalize-space(name) = 'TV Show Name']/value">
<value>
<xsl:value-of select="concat(normalize-space(), ' -- CANCELLED')"/>
</value>
</xsl:template>
</xsl:stylesheet>
向我们展示您的尝试。