我们使用以下内容选择'ExperienceInfo'包含'582'的所有节点:
<xsl:apply-templates disable-output-escaping="yes" select="td:Benutzer_zu_Gastro[contains(td:ExperienceInfo, '582')]">
这将选择'Kategorien'包含'Restaurant'的所有节点:
<xsl:apply-templates disable-output-escaping="yes" select="td:Benutzer_zu_Gastro[contains(td:Kategorien, 'Restaurant')]">
我们如何将两者合并为一个语句,以便在ExperienceInfo包含582 AND Kategorien包含餐馆的地方选择ONLY节点?
非常感谢您的帮助!
答案 0 :(得分:0)
这很简单,你必须想到“不,那不可能”:
<xsl:apply-templates select="
td:Benutzer_zu_Gastro[
contains(td:ExperienceInfo, '582')
and contains(td:Kategorien, 'Restaurant')
]
">
如果你的XML看起来像<td:ExperienceInfo>582</td:ExperienceInfo>
(等),那么它可以变得更简单。
<xsl:apply-templates select="
td:Benutzer_zu_Gastro[
td:ExperienceInfo = '582' and td:Kategorien = 'Restaurant'
]
">
两个一般性说明
如果您的XML已分隔<td:ExperienceInfo>582,693</td:ExperienceInfo>
等列表(请说它没有),则需要使用contains()
,但最好包含分隔符以避免使用误报:
contains(concact(',', td:ExperienceInfo, ','), ',582,')
disable-output-escaping="yes"
不是XSLT处理器的标准功能。正如迈克尔凯指出in the comments,它在<xsl:apply-templates>
首先在语法上无效。
试着摆脱它。 有时无法避免,但往往表明存在设计缺陷 - 它可以输出格式错误的XML,并且是数据和结构分离不当的标志。