【发布时间】:2016-02-20 23:49:45
【问题描述】:
如何在 XPath 中使用递归 AND 条件选择?
例如,给定这个文档:
<root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
<file name="foo.mp4">
<chunks>
<file>
<chunks>
<file>
<chunks>
<file>1</file>
<file>2</file>
<file>3</file>
<file>4</file>
</chunks>
</file>
<file>
<chunks>
<file>5</file>
<file>6</file>
<file>7</file>
<file>8</file>
</chunks>
</file>
</chunks>
</file>
<file>
<chunks>
<file>
<chunks>
<file>9</file>
<file>10</file>
<file>11</file>
<file>12</file>
</chunks>
</file>
<file>
<chunks>
<file>13</file>
<file>14</file>
<file>15</file>
<file>16</file>
</chunks>
</file>
</chunks>
</file>
</chunks>
</file>
</root>
我只想选择:
<file>1</file>
<file>2</file>
<file>3</file>
<file>4</file>
所以,实际上是这样的:
//[name="foo.mp4"]/chunks/*[1]/chunks/*[1]/*
但是使用一种通用的方法 - 即可以覆盖更深嵌套对象的方法。像这样的:
//[name="foo.mp4"]/(chunks/*[1]/)+/*
(cond)+ 不是 XPath 语法,而是我想要的类似正则表达式的表示。
【问题讨论】:
-
抱歉,这是一个非常糟糕的需求说明。您实际上是在说“如果输入是 17,那么我希望答案是 23,但我希望这个泛化适用于任何输入”。你需要给我们从输入计算输出的一般规则;我们无法从一个例子中推断出来。
标签: xml xpath recursive-regex