我正在尝试解析一些数据,这些数据包含 <text />
中选项卡的每个单元格节点。我需要忽略以星号 *
开头的节点以及它之后的 4 个节点。这可以用 xpath 完成吗,还是我需要用不同的方式来解决这个问题?
编辑:我的 XML 如下所示:
<page>
<text attr="123" attr2="1234">ROW 1 CELL 1</text>
<text attr="123" attr2="1234">ROW 1 CELL 2</text>
<text attr="123" attr2="1234">ROW 1 CELL 3</text>
<text attr="123" attr2="1234">ROW 1 CELL 4</text>
<text attr="123" attr2="1234">ROW 1 CELL 5</text>
<text attr="123" attr2="1234">* ROW 2 CELL 1</text>
<text attr="123" attr2="1234">ROW 2 CELL 2</text>
<text attr="123" attr2="1234">ROW 2 CELL 3</text>
<text attr="123" attr2="1234">ROW 2 CELL 4</text>
<text attr="123" attr2="1234">ROW 2 CELL 5</text>
<text attr="123" attr2="1234">ROW 3 CELL 1</text>
<text attr="123" attr2="1234">ROW 3 CELL 2</text>
<text attr="123" attr2="1234">ROW 3 CELL 3</text>
<text attr="123" attr2="1234">ROW 3 CELL 4</text>
<text attr="123" attr2="1234">ROW 3 CELL 5</text>
</page>
最佳答案
下面的表达式:
/*/text[not(starts-with(., '*')) and
not(preceding::*[position()<5][starts-with(., '*')])]
根据您的输入选择以下内容:
<root>
<text attr="123" attr2="1234">ROW 1 CELL 1</text>
<text attr="123" attr2="1234">ROW 1 CELL 2</text>
<text attr="123" attr2="1234">ROW 1 CELL 3</text>
<text attr="123" attr2="1234">ROW 1 CELL 4</text>
<text attr="123" attr2="1234">ROW 1 CELL 5</text>
<text attr="123" attr2="1234">ROW 3 CELL 1</text>
<text attr="123" attr2="1234">ROW 3 CELL 2</text>
<text attr="123" attr2="1234">ROW 3 CELL 3</text>
<text attr="123" attr2="1234">ROW 3 CELL 4</text>
<text attr="123" attr2="1234">ROW 3 CELL 5</text>
</root>
所有 ROW 2
都被跳过。
下面的表达式是等价的(根据德摩根定律):
/*/text[not(starts-with(., '*') or
preceding::*[position()<5][starts-with(., '*')])]
关于xml - 匹配后排除节点的 Xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6698613/