javascript XPath 实现
关于XPath的相关知识可以参看http://www.w3school.com.cn/xpath/index.asp
注意:以下代码的测试环境为FF3.6.3及IE6.0 。chrome浏览器没有测试过,应该不支持。
在进行XPath之前要对xml文档进行加载。如何加载可参看上篇文章。
当然上述方法,如果是在IE中,可以同过IE提供最基本的两个方法解决,这里就不多做赘述。
下面我们最完成的代码做下测试,看下上述编码对与XPath语法的支持情况,为此做如下测试页面
?exam1.xml源文件如下:
我们可以在输入框中进行测试。使用XPath语法 进行测试,当然大部分语法都可以在FF中测试通过,但在IE中,显然对Xpath轴 是不支持的,同时对XPath谓语表达式中的last()、position()也是不支持的。
以下是一些测试语法,大家可以试下:
测试XPath表达式//IE \FF 均测试通过
//no 或者 /exam/no????????????????? ? ? ? ? ?? 选取所有no节点
//no[@id='1']????????????????????????? ? ? ? ? ? ? 选取no节点属性为1的节点
//no/* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 选取no的所有子节点
//no[@*] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????????? 选取所有带有属性的no节点
//no[value>4]???????????????????????????????????? 选取no节点下value节点值大于4的no节点
//no/question1/q | //no[@id='2']??????? 选取no下question1中的q节点或着no节点属性为1的节点
//no/question1/text()??????????????????????? ?取no节点下所有的question1节点所包含的文本
//IE不支持XPath轴表达式
//ff
//no[last()-1]?????????????????????????????????????? 选取倒数第一个no节点
//no[position()<3]?????????????????????????????? 选择位置小于3的no节点
child::no????????????????????????????????????????????? 选取当前文档所有的no节点
//no/child::question1 ? ? ? ? ? ? ? ? ? ? ? ?? 选取no节点下所有的question1节点
//no/child::question1/child::text()?????? 取no节点下所有的question1节点所包含的文本