c# 中xpath语法 如何获得元素Node下的所有子元素和孙元素叫item的。 其他地方也有叫item的元素 ,但不能取

c# 中xpath语法 如何获得元素Node下的所有子元素和孙元素叫item的。 其他地方也有叫item的元素 ,但不能取,第1张

XmlElement theNode = null;

XmlElement root = null;

XmlDocument document = new XmlDocument();

documentLoad(@"你的xml位置xml");

root = documentDocumentElement;

theNode=(XmlElement)rootSelectSingleNode("位置/Node);

string name= theNodeGetElementsByTagName("item")Item(0)InnerText;

String xpath = "/html/body/form/div/table/a";

List<Node> trNodes = docselectNodes(xpath);

for (int i=1;i < trNodessize();i++){

Element trElement = (Element)trNodesget(i);

List<Element> tdList = trElementelements();

Element tdElement1 = tdListget(1);

Element fontElement1 = (Element)tdElement1elements()get(0);

String c1 = fontElement1getText()

}

可以试试

你应该是写错了吧,你改成 //div[@class="proLis"]//span/text() 试试。单斜杆表示只取其儿子辈的节点,你的span标签都是N辈了

再说,没有必要自己写,你可以在chrome浏览器装一个ChroPath插件,点击元素,然后就会出来相应的xpath表达式

1、首先自己编写了一个网页。

2、如图,在浏览器中打开网页。然后//div,就可以找到页面中的所有div了,因为//表示的是任意目录下查找。如图,页面有两个div,所以可以找到两个。

3、还可以用类来排除多余的div,比如要查找类为a的div,可以在div后面用[@class="类名"]来指定,这样没有类名a的div就会被过滤掉,当然,还可以用id,把class改为[@id="id名"]即可。

4、那么如果想找div下面的a标签怎么办,同样,还是用//,这样div下面的非a标签就会被跳过,直接去找a标签。

5、如果要获取a标签的href,那么可以获取到a标签后用/@href即可获得。

6、如果是获取文本的话,可以用text()这个方法,就会得到a标签里面的内容。

7、如图,斜杠/表示的是获取子元素,比如div下面有两个子元素p,那么//div[2]/p获取的就是第二个div的子元素p。这样简单的xpath就分析完了。

本文主要围绕以xpath和lxml库进行展开:

一、xpath 概念、xpath节点、xpath语法、xpath轴、xpath运算符

二、lxml的安装、lxml的使用、lxml案例

一、xpath

1xpath概念

XPath 是一门在 XML 文档中查找信息的语言。XPath 使用路径表达式在 XML 文档中进行导航 。XPath 包含一个标准函数库 。XPath 是 XSLT 中的主要元素 。XPath 是一个 W3C 标准 。

2xpath节点

xpath有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。

节点关系:父、子、兄弟、先辈、后辈。

3xpath语法

xpath语法在W3c网站上有详细的介绍,这里截取部分知识,供大家学习。

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。下面列出了最有用的路径表达式:

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

XPath 通配符可用来选取未知的 XML 元素。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

通过在路径表达式中使用"|"运算符,您可以选取若干个路径。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

4xpath 轴

轴可定义相对于当前节点的节点集。

5xpath运算符

下面列出了可用在 XPath 表达式中的运算符:

好了,xpath的内容就这么多了。接下来我们要介绍一个神器lxml,他的速度很快,曾经一直是我使用beautifulsoup时最钟爱的解析器,没有之一,因为他的速度的确比其他的htmlparser 和html5lib快了许多。

二、lxml

1lxml安装

lxml 是一个xpath格式解析模块,安装很方便,直接pip install lxml 或者easy_install lxml即可。

2lxml 使用

lxml提供了两种解析网页的方式,一种是你解析自己写的离线网页时,另一种 则是解析线上网页。

导入包:

1解析离线网页:

2解析在线网页:

那么我们怎么获取这些标签和标签对应的属性值了,很简单,首先获取标签只需你这样做:

然后我们可以,比方说,你要获取a标签内的文本和它的属性href所对应的值,有两种方法,

1表达式内获取

2表达式外获取

这样就完成了获取,怎么样,是不是很简单了,哈哈哈。

下面再来lxml的解析规则:

3lxml案例

为了偷懒,我决定还是采用urllib那篇文章的代码,哈哈哈,机智如我。

首先:鼠标API函数

[DllImport("User32")]

public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);

[DllImport("User32")]

public extern static void SetCursorPos(int x, int y);

[DllImport("User32")]

public extern static bool GetCursorPos(out POINT p);

public struct POINT

{

public int X;

public int Y;

}

public enum MouseEventFlags

{

Move = 0x0001,

LeftDown = 0x0002,

LeftUp = 0x0004,

RightDown = 0x0008,

RightUp = 0x0010,

MiddleDown = 0x0020,

MiddleUp = 0x0040,

Wheel = 0x0800,

Absolute = 0x8000

}

其次:载入webBrowser

private void FormBrower_Load(object sender, EventArgs e)

{

webBrowserNavigate(">

$('#id')siblings() 当前元素所有的兄弟节点

$('#id')prev() 当前元素前一个兄弟节点

$('#id')prevaAll() 当前元素之前所有的兄弟节点

$('#id')next() 当前元素之后第一个兄弟节点

$('#id')nextAll() 当前元素之后所有的兄弟节点

这三个方法都可以添加选择器,给出选择条件,就能找到你指定的兄弟节点了。

以上就是关于c# 中xpath语法 如何获得元素Node下的所有子元素和孙元素叫item的。 其他地方也有叫item的元素 ,但不能取全部的内容,包括:c# 中xpath语法 如何获得元素Node下的所有子元素和孙元素叫item的。 其他地方也有叫item的元素 ,但不能取、Xpath 怎么获取元素节点的名字、xpath怎么提取span标签内的元素,只能用正则吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9511070.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存