XPath总结1

为客户做了一年的xml处理工作,觉得应该把xpath总结一下。

利用puginxml解析xml文档,利用树形的节点方式进行查询,本身支持xpath。

1、关于节点和匹配属性:

	/SCL/Substation/VoltageLevel[@Private='aaaa']
	SCL为xml树的根节点,知道了节点层级路径可以轻松找到VoltageLevel,而通过属性值过滤出我们希望得到的话追加后面部分,注意语法,条件[]括起,属性前加@
,属性值用单引号括起。
2、需要多个节点
	/SCL/Substation/VoltageLevel/LN0,
	/SCL/Substation/VoltageLevel/LN
我们可以写两句分别获取,这种效率就低了,我们可以合成一句话:/SCL/Substation/VoltageLevel/*[local-name()='LN0' or local-name()='LN']这里用到了XPath的一个函数,*代表所有,没有后面条件就是VoltageLevel所有子节点了。


3、用户提出需要对某个节点下的符合条件的LNode进行查询
	开始我按照规则查找,用了多个语句,可是后来增加了许多的包含特例,于是我修改了一下如下:
	QString("//LNode[@lnInst='%1' and @lnClass='%2' and @iedName='%3' and @ldInst='%4']")
这里的%1-4是Qt的QString一个字符替换规则,那么前面的//这两个符号就是代表所有节点,这样我们可以查找该节点下的所有符合条件的LNode,即使这个节点放在很深的层次。

4、关于text条件查询
	<LNode> aaaaa </LNode> 找到text == aaaaa 的LNode节点,用XPath也可以轻松找到:
	"LNode[normalize-space(text()) = 'aaaaa']",
		normalize-space()用来将一个字符串的头部和尾部的空白字符删除,这个是客户要求的。这里寻找text我们使用text()这个函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值