Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT:如何在“中表示或”;匹配“;属性_Xml_Xslt - Fatal编程技术网

Xml XSLT:如何在“中表示或”;匹配“;属性

Xml XSLT:如何在“中表示或”;匹配“;属性,xml,xslt,Xml,Xslt,我想对匹配名称“a”或“B”的元素执行一系列操作。我在想下面类似的东西,但它不起作用 <xsl:template match= " 'A' or 'B'" > <!-- whatever I want to do here --> </xsl:template> 找不到相应的XSLT语言引用。请帮忙!谢谢 试试这个: <xsl:template match= "A | B" > 以下信息来自: 我将解释一下,请在该文档中搜索文

我想对匹配名称“a”或“B”的元素执行一系列操作。我在想下面类似的东西,但它不起作用

<xsl:template match= " 'A' or 'B'" >
     <!-- whatever I want to do here -->
</xsl:template>

找不到相应的XSLT语言引用。请帮忙!谢谢

试试这个:

<xsl:template match= "A | B" >


以下信息来自:

我将解释一下,请在该文档中搜索文本“使用or运算符|”

语法是:

<xsl:template match="A|B">
   <!-- Do your stuff> -->
</xsl:template>

一般来说,
A | B
是正确的方法。但管道字符基本上是两个完整XPath表达式的并集。在这样的情况下使用它可能会很烦人:

/red/yellow/blue/green/gold | red/orange/blue/green/gold
因为你在重复整个表达式,除了其中的一小部分,所以它发生了变化

在这种情况下,使用谓词和
name()
函数通常是有意义的:

/red/*[name() = 'yellow' or name()='orange']/blue/green/gold
这种技术使您能够访问范围更广的逻辑操作。它也(可以想象)更快,因为XPath导航器只需遍历它正在测试的节点一次

此匹配模式存在一些问题

  • 模板匹配的是节点,而不是字符串。因此,要匹配的元素的名称不应指定为带引号的字符串

  • 作用于两个布尔值,而不是节点。这里需要的是

  • 考虑到上述情况,可以正确地将模板规则指定为:

    <xsl:template match= "A | B" >
         <!-- whatever I want to do here -->
    </xsl:template>
    

    我认为使用XPath更方便

    /red/(yellow | orange)/blue/green/gold
    
    而不是

    /red/*[name() = 'yellow' or name()='orange']/blue/green/gold
    

    另请参见:meThis的最佳和最完整答案在
    模板的
    匹配属性中不起作用。它是有效的XPATH,但不是有效的模式。