自己写个XPATH(1)

text(root/vrs/vr)	//123
text(root/vrs/vr[vr.psn=343]) //1233
text(root/vrs/vr[vr.psn=abc&&vr.lsn=dd]) //123
text(root/vrs/vr[vr.psn=abc&&vr.lsn=dd]) //123
text(root/t[t.id=2]/tag3) //4343
text(root/t[t.id=1]/tag3[tag.ti=5]) //abcdefg
text(root/t[t.id=1]/tag3[tag.ti=4&&tag2=2]) //4343
attr(root/vrs/vr.lsn[vr.psn=abc]) //dd
attr(root/vrs/vr.lsn[vr.psn=abc]) = newvalue //属性值设置成新值
text(root/t[t.id=1]/tag3[tag.ti=4&&tag2=2]) = newvalue //文本设置成新值
<root>
<vrs>
<vr psn='abc' lsn='dd'>
123
</vr>
<vr psn='343'>
1233
</vr>
<vr psn='abc'>
1gdfds
</vr>
</vrs>
<t id=2>
<tag ti=4>1</tag>
<tag2>2</tag2>
<tag3>4343</tag3>
</t>
<t id=1>
<tag ti=5>1</tag>
<tag2>2</tag2>
<tag3>abcdefg</tag3>
</t>
</root>

这是设计^ ^ 不知道有没有BUG

1 []里的肯定是条件表达式

2 /后紧跟元素名 再紧跟的肯定是条件表达式或无或.属性

3 表达式中有类似element.attribute = 表示本层中(nextsibling)元素的属性值,否则element=表示元素的text

4 text(root/vrs/vr[vr.psn=abc&&vr.lsn:int=dd])   
text(root/vrs/vr[vr.psn=abc&&vr.lsn:float=dd]) 

text(root/vrs/vr[vr.psn=abc&&vr.lsn=dd])默认为字符串比较     

接下来表达式解析,对于运算符的解析还没有好方法(关键是优先级的解析)

惆怅

原文地址:https://www.cnblogs.com/yangyh/p/1930336.html