不得不说的一个问题,如果不说,可能会产生误会,xml的例子仍用前文的那个。如下XPath表达式,它所得到的XmlNodeList的Count是多少呢?
/Forms/node()[2]/* 得到一个XmlNodeList,Count==4,而不是包括这些元素的子节点。
这个问题很重要,如果*的结果真的包含了孙节点曾孙节点的话,那么程序员将很无奈。因为得到的结果鱼龙混杂。
除了上面的问题,我总结一下一些常用的XPath:
/Forms/* 选择Forms下的所有子元素节点,不包括孙子……
/Forms/*/attribute::name 选择Forms下的所有子元素节点的name属性
count(/Forms/*) 获得Forms下的所有子元素节点的个数
/Forms/Form[@name='A']/* 选择Forms下有name属性且值为A的Form节点的所有子元素节点
/Forms/node()[2]/text() 选择Forms下第二个节点下的所有文本节点
/Forms/node()[2]/comment() 选择Forms下第二个节点下的所有注释节点
/Forms/node()[2]/attribute() 选择Forms下第二个节点的所有属性节点
老实说,平常要用到的xpath基本上就这么几个,没有多少,而复杂的我们平常都用不着。
经我实验,上面的xpath都不选取非直系子节点。可以放心大胆了。当然,一些特殊的函数除外。
评论