我正在尝试使用C#中的HtmlAgilityPack检索不包含值
(空格)的一定数量的元素。这是我的XPath表达式:
"(td)[(position() >= 10 and position() <= last()) and not(.=' ')]"
但它仍然给我这些节点,我尝试使用文字空间, 
ALT + 1060 - 似乎没有任何效果。这是我正在解析的内容:
<tr height=20 style='mso-height-source:userset;height:15.0pt'>
<td height=20 class=xl96 style='height:15.0pt'> </td>
<td class=xl97> </td>
<td class=xl106 style='border-top:none'>JIM COCKS</td>
<td class=xl107 style='border-top:none;border-left:none'> </td>
<td class=xl107 style='border-top:none;border-left:none'> </td>
<td class=xl107 style='border-top:none;border-left:none'>HOL</td>
<td class=xl76> </td>
<td class=xl103 style='border-left:none'> </td>
<td class=xl97> </td>
<td class=xl104 style='border-top:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'>09:30</td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'>17:00</td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl104 style='border-top:none;border-left:none'> </td>
<td class=xl76> </td>
</tr>
具有类'xl104'的项目是我想要抓取的(我已经使用位置语句完成了它们的类更改)但我只想要包含除
以外的其他内容的节点,例如你看到上面的09:30和17:00。
答案 0 :(得分:1)
"(td)[(position() >= 10 and position() <= last()) and not(.=' ')]"
not(.=' ')
测试整个text()节点不是字符串' '
。
您想使用XPath contains()
函数:
not(contains(., ' '))
答案 1 :(得分:0)
我正在尝试检索选择金额 不包含的元素 值
我相信@Dimitre已经回答了该任务的规范。
我只想要包含的节点 除
之外的其他内容
略有不同的规格。 这有用吗? (已编辑;感谢亚历杭德罗。)
"td[position() >= 10 and translate(., ' ', '') != '']"
这相当于更短,但可读性更低:
"td[position() >= 10 and translate(., ' ', '')]"
无论如何,你发现了这个问题,所以我们不会再这么做了。
请注意,除非您定义,否则在XPath中逐字使用
通常不会起作用。此字符实体以HTML格式预定义,但不以XML格式预定义。这就是 
或 
更可靠的原因。但是,HtmlAgilityPack可能会为您定义。