zyXML是一个轻便、小巧的,纯易语言代码来解析XML的模块。
优点:
1、不依赖任何DLL、支持库、系统组件(Microsoft.XMLDOM等对象)
2、支持UTF-8、UTF-16等编码
3、支持XPath语法来查询节点
4、支持 CDATA
5、开源(如果有任何问题可以自己修改)
缺点:
1、加载速度稍微逊色于支持库,但是查询速度很快。
2、不支持DTD,也就是类似于如下的节点
]>
3、XPath查询语法支持不全(要全部支持太麻烦了,实在没精力去解析了)
XPath具体语法可参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp
目前支持的XPath语法有限,不支持的有:
1、查找只能返回节点,而不能返回属性,当然查找条件可以有属性,如:节点名[@属性名='属性值']
2、[]括号里面的谓语表达式仅仅支持一个操作符号,且不支持|、or、and和mod,并且属性名不支持*,仅仅元素名才支持*
3、轴不支持following、namespace、preceding和preceding-sibling
4、函数都不支持,但是可以有如下使用:
node()可返回所有节点且不管节点是什么类型
cdata()仅查找CDATA类型的节点
text()仅查找文本节点
comment()仅查找注释节点
*仅查找元素节点
举一些支持的例子
路径表达式 | 结果 |
---|---|
bookstore | 选取bookstore元素的所有子节点。 |
/bookstore | 选取根元素bookstore。 注释:假如路径起始于正斜杠(/ ),则此路径始终代表到某元素的绝对路径! |
bookstore/book | 选取属于bookstore的子元素的所有book元素。 |
//book | 选取所有book子元素,而不管它们在文档中的位置。 |
bookstore//book | 选择属于bookstore元素的后代的所有book元素,而不管它们位于bookstore之下的什么位置 |
/bookstore/book[1] | 选取属于bookstore子元素的第一个book元素。 |
/bookstore/book[last()] | 选取属于bookstore子元素的最后一个book元素。 |
/bookstore/book[last()-1] | 选取属于bookstore子元素的倒数第二个book元素。 |
//title[@lang] | 选取所有拥有名为lang的属性的title元素。 |
//title[@lang='eng'] | 选取所有title元素,且这些元素拥有值为eng的lang属性。 |
/bookstore/book[price>35.00] | 选取bookstore元素的所有book元素,且其中的price元素的值须大于35.00。 |
/bookstore/book[price>35.00]/title | 选取bookstore元素中的book元素的所有title元素,且其中的price元素的值须大于35.00。 |
child::book | 选取所有属于当前节点的子元素的book节点。 |
child::* | 选取当前节点的所有子元素。 |
child::text() | 选取当前节点的所有文本子节点。 |
child::node() | 选取当前节点的所有子节点。 |
descendant::book | 选取当前节点的所有book后代。 |
ancestor::book | 选择当前节点的所有book先辈。 |
ancestor-or-self::book | 选取当前节点的所有book先辈以及当前节点(如果此节点是book节点) |
child::*/child::price | 选取当前节点的所有price孙节点。 |
另外元素索引我好像弄成从0开始了,好像XPath本身索引是从1开始的。