0

使用 HTML Agility Pack,我正在尝试使用 XPATH 选择 XHTML 中的节点。我想在每个 p 标签中选择我在下面列出的孩子,而不是孙子:

<strike></strike>
<em></em>
<u></u>
<strong></strong>
<sub></sub>
<sup></sup>

换句话说,我正在寻找AB,但不是任何一个节点的第二级。同时,可以在集合中的任何位置找到AB节点。注意:AB可以是我上面列出的任何一个。

A和B图像来表示节点树

如果我有以下 XHTML:

<?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta name="generator" content="HTML Tidy for Windows (vers 25 March 2009), see www.w3.org" />
<title></title>
</head>
<body>
    <p><strike>element 1</strike> and <strike><em>element 2</em></strike></p>
    <p><strike>element 3</strike></p>
    <p><strike>element 4</strike></p>
</body>
</html>

如果我可以在每个 p 标记中选择上面列出的子节点,它将返回以下节点集合:strike、strike、strike 和strike。让我接触到每次罢工的孩子。

<strike>element 1</strike> and <strike><em>element 2</em></strike>

XPATH 中的第一个表示 sub [1](我的意思是罢工的实例),第二个被忽略的是 sub [2](我的意思是罢工的实例)。这是有道理的,因为这就是我的查询正在做的事情。然后 XPATH 抓取<em>标签等等......

我可以解释这一点的另一种方式是说我想要//a|//b|//c|//d|//e不是孩子。这可能吗?

最后,这让我对如何找到解决方案感到困惑。

我在MSDN上寻找关于 XPATH 的答案。

如果您需要进一步的研究或信息,请告诉我。我会提供的。

4

2 回答 2

1

你用//.

这将选择整个文档中的所有匹配节点,无论在哪个级别。如果您只想在它们直接位于 a 下时选择某些节点p,请执行//p/strike. 这将匹配p任何地方的节点,但只有strike直接在 a 下的节点p

于 2012-12-12T20:47:08.273 回答
0

在Frank van Puffelen和工作中的朋友的建议下,我想出了一个很好的解决方案。

这个问题将分两步解决。

首先,我将选择我需要的所有节点SelectNodes("//strike|//em|//u|//strong|//sub|//sup")

其次,然后我将使用 for 循环遍历我选择的所有节点,查看节点父节点,如果父节点是以下之一:strike、em、u、strong、sub 和 sup,然后将其删除并继续。

感谢大家。

于 2012-12-14T14:38:58.480 回答