如何简化这个Xpath表达式?

如何简化这个Xpath表达式?,xpath,expression,xslt-1.0,reduction,Xpath,Expression,Xslt 1.0,Reduction,我有以下XML代码: <root> <a><l_desc/></a> <b><l_desc>foo</l_desc></b> <c><l_desc>bar</l_desc></c> </root> 福 酒吧 我想将l_desc节点与a或b节点作为父节点进行匹配。 现在,我使用这个xpath表达式://a/l_desc

我有以下XML代码:

<root>
   <a><l_desc/></a>
   <b><l_desc>foo</l_desc></b>
   <c><l_desc>bar</l_desc></c>
</root>

福
酒吧

我想将l_desc节点与ab节点作为父节点进行匹配。
现在,我使用这个xpath表达式:
//a/l_desc/。|//提单说明。

我更喜欢这样写:
/(a | b)/l|u desc/。
不幸的是,此表达式无效

你对减少第一个表达式有什么想法吗? xpath将在XSLT样式表v1.0中使用


你可以在这里使用谓词

l_desc[../a|../b]

这里可以使用谓词

l_desc[../a|../b]
我想将
l_desc
节点与 a或b节点作为父节点

更简单的是:

/root/a/l_desc | /root/b/l_desc

启动
/
运算符时(设计错误,架构未知):

在XPath 2.0中,这是有效的

/root/(a|b)/l_desc
我想将
l_desc
节点与 a或b节点作为父节点

更简单的是:

/root/a/l_desc | /root/b/l_desc

启动
/
运算符时(设计错误,架构未知):

在XPath 2.0中,这是有效的

/root/(a|b)/l_desc
怎么样

//l_desc[parent::a or parent::b]
怎么样

//l_desc[parent::a or parent::b]

使用:

/*/*[self::a or self::b]/l_desc
这意味着:选择作为任何
a
b
元素的子元素的所有
l_desc
元素,该元素本身是XML文档顶部元素的子元素

避免

  • 了解文档结构后,使用
    /
    缩写<代码>/可能非常低效

  • 在不需要时使用反向轴(例如
    父轴:
    )。包含反向轴的表达式更难理解,并且可能比仅包含正向轴的表达式效率更低

  • 使用:

    这意味着:选择作为任何
    a
    b
    元素的子元素的所有
    l_desc
    元素,该元素本身是XML文档顶部元素的子元素

    避免

  • 了解文档结构后,使用
    /
    缩写<代码>/可能非常低效

  • 在不需要时使用反向轴(例如
    父轴:
    )。包含反向轴的表达式更难理解,并且可能比仅包含正向轴的表达式效率更低


  • 这一个有效,但我必须修改一点:l_desc[../self::a |../self::b]这一个有效,但我必须修改一点:l_desc[../self::a |../self::b]样式表中的哪里?作为@match中的模式?作为@select?好问题+1中的表达式。不过,您还没有接受最佳答案。样式表中的哪个位置?作为@match中的模式?作为@select?好问题+1中的表达式。不过,你还没有接受最佳答案。+1代表一个好的、详尽的答案,绝对是所有答案中最好的。+1代表一个好的、详尽的答案,绝对是所有答案中最好的。