通过属性字符格式来访问GPath格式的Xml
GPath方式的Xml访问,为我们的Xml处理提供了极大的灵活性和简单性,这都要归功于Groovy的简洁和强大,在此就不罗嗦了。可是如果Xml的tag处理,你不想在你的代码里边写死,而是希望通过配置文件来灵活定制呢,让我们还是以实例来说话吧
我有一个Xml,如下:
<a> <aa a="attrA"> <aaa1 b="attrB">aaa1Content</aaa1> <aaa2 c="attrC">aaa2Content</aaa2> </aa></a>
如果我要处理aaa2的c属性,那我需要这样的表达式:root.aa.aaa2.@c来得到这个xml元素,当然了,这么简单的用法谁都知道,可是如果我的标签并不想这样写死代码里边,我想灵活的定制,比如我以后新的Xml有aaaa.@c这样的元素呢?显然通过:root."aa.aaa2.aaaa”.@c的方式并不成功,因为GPath将"aa.aaa2.aaaa”看作是一个标签,而不是3个父子关系的标签。
其实解决办法有好多,你可以用find闭包方法,而我目前觉得用循环的方式更简单,我的全部代码如下:
def xml = """<a> <aa a="attrA"> <aaa1 b="attrB">aaa1Content</aaa1> <aaa2 c="attrC">aaa2Content</aaa2> </aa></a>"""def root = new XmlSlurper().parseText(xml)def aa = "aa.aaa2"def v=rootaa.split("\\.").each{ v=v."$it"}assert "aaa2Content"==v.text()assert "attrC"==v.@c.text()
如果对Groovy有任何疑问,请来:Groovy中文社区
页:
[1]