0

我们使用以下内容选择“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 且类别包含 Restaurant 的节点?

非常感谢您的帮助!

4

1 回答 1

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 处理器的标准特性。正如迈克尔凯在评论中指出的那样,它甚至在一开始就<xsl:apply-templates>在语法上无效。
    试着摆脱它。有时它无法避免,但通常它表明存在设计缺陷——它可以输出格式错误的 XML,并且是数据和结构分离不当的标志。

于 2013-07-11T08:49:32.130 回答