通过属性字符格式来访问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=root
aa.split("\\.").each{
v=v."$it"
}
assert "aaa2Content"==v.text()
assert "attrC"==v.@c.text()


如果对Groovy有任何疑问,请来:[url=http://www.chinagroovy.org]Groovy中文社区[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值