如何遍历xml节点并检查属性值?
我有这个xml,我把它放在xml如何遍历xml节点并检查属性值?,xml,groovy,xmlslurper,Xml,Groovy,Xmlslurper,我有这个xml,我把它放在xmlGPathResult对象中如何使用groovy xml slurping检查Microsoft(R)Windows(R)Server 2003企业版x64版本,将字段值设置为OS名称 <client productname="abp"> <machine> <env> <variable name='ALLUSERSPROFILE' value='C:\Documents and Settings\All Us
GPathResult对象中
如何使用groovy xml slurping检查Microsoft(R)Windows(R)Server 2003企业版x64版本
,将字段
值设置为OS名称
<client productname="abp">
<machine>
<env>
<variable name='ALLUSERSPROFILE' value='C:\Documents and Settings\All Users' />
<variable name='APPDATA' value='C:\Documents and Settings\Administrator\Application Data' />
<variable name='OS' value='Windows_NT' />
<variable name='COMPUTERNAME' value='AbhishekPC' />
</env>
<osinfo>
<osinfo field='OS Name' information='Microsoft(R) Windows(R) Server 2003 Enterprise x64 Edition' />
<osinfo field='OS Version' information='5.2.3790 Service Pack 2 Build 3790' />
<osinfo field='OS Manufacturer' information='Microsoft Corporation' />
<osinfo field='OS Configuration' information='Standalone Server' />
<osinfo field='OS Build Type' information='Multiprocessor Free' />
</osinfo>
</machine>
</client>
此处HI 1
打印所有环境名称属性值,但HI 2
仅打印HI 2
这是快照
这是我穿越后解决的问题
def vals1=gpathResult.machine.env.variable.findAll{it.@name=='COMPUTERNAME'}.@value.text()
println vals1
csmSummary.hostname=vals1
def vals2=gpathResult.machine.env.variable.findAll{it.@name=='OS'}.@value.text()
println vals2
csmSummary.osname=vals2
奇怪。。。如果我这样做(使用Groovy 1.8)
您可以尝试一下该代码吗(假设您使用的是Groovy的最新版本1.8——如果不是,您将需要使用“”“
而不是$/
作为字符串分隔符,并转义\
字符)
[编辑]可能只是因为您使用的是gpathResult.machine.environment.variable
而不是gpathResult.machine.env.variable
要遍历环境节点,请执行以下操作:
gpathResult.machine.env.variable.each { node ->
println "${node.@name.text()} contains ${node.@value.text()}"
}
奇怪……如果我这样做(使用Groovy 1.8)
您可以尝试一下该代码吗(假设您使用的是Groovy的最新版本1.8——如果不是,您将需要使用“”“
而不是$/
作为字符串分隔符,并转义\
字符)
[编辑]可能只是因为您使用的是gpathResult.machine.environment.variable
而不是gpathResult.machine.env.variable
要遍历环境节点,请执行以下操作:
gpathResult.machine.env.variable.each { node ->
println "${node.@name.text()} contains ${node.@value.text()}"
}
你有用于将xml解析为
gpathResult
变量的代码吗?@tim_yates:有,我会在几分钟后发布gpathResult
是如何创建的(XmlSlurper
等?)。这是我的问题…@tim:现在检查,文件路径是正确的,因为这是我打印其他东西的方式onscreen@tim_yates:我想我可能可以遍历所有osinfo,然后检查字段
名称(如果存在),然后打印特定的信息
属性。那么我如何遍历这个osinfo并检查字段attribs/你有没有用于将xml解析为gpathResult
变量的代码?@tim_yates:有,我会在一分钟后发布它gpathResult
是如何创建的(XmlSlurper
,等等?)这是我的问题…@tim:现在检查,文件路径是正确的,因为这是我打印其他东西的方式onscreen@tim_yates:我想我可能可以遍历所有osinfo,然后检查字段
名称(如果存在),然后打印特定的信息
属性。因此,我如何遍历此osinfo并检查字段attribs/HI 1是否正确打印,但HI 2仍然不打印任何内容,并且在我的系统中,它的环境
而不是环境
。另外,我正在使用groovy 1.8,我将在一分钟内创建一个快照,请检查我的question@Abhishek那一定是你没有告诉我们的。由于XML和代码不匹配,我猜它们中的任何一个都有问题,并且您没有在这里发布正确的信息以供我们帮助您。您运行的是上面的代码吗,它没有为HI 2
打印任何内容?好的,请告诉我如何遍历每个环境。变量元素,以便我可以尝试其他内容,可能是我复制粘贴了您的println
语句,在这里我只发布了一点xml,我不想透露部分xml和节点名称也不一样,但我在编辑时很谨慎,这就是为什么env被误认为是环境问题。我想问题一定是您有OSinfo
或OSinfo
或其他什么,而不是OSinfo
,因为您在此处发布的HI 1打印正确,但是HI 2仍然不打印任何内容,在我的系统中,它的环境
,而不是环境
。另外,我正在使用groovy 1.8,我将在一分钟内创建一个快照,请检查我的question@Abhishek那一定是你没有告诉我们的。由于XML和代码不匹配,我猜它们中的任何一个都有问题,并且您没有在这里发布正确的信息以供我们帮助您。您运行的是上面的代码吗,它没有为HI 2
打印任何内容?好的,请告诉我如何遍历每个环境。变量元素,以便我可以尝试其他内容,可能是我复制粘贴了您的println
语句,在这里我只发布了一点xml,我不想透露部分xml和节点名称也是不同的,但我在编辑时很谨慎,这就是为什么env被误认为是环境问题。我想问题一定是您有OSinfo
或OSinfo
或其他什么,而不是您在这里发布的OSinfo
HI 1 [ALLUSERSPROFILE, APPDATA, OS, COMPUTERNAME]
HI 2 [OS Name, OS Version, OS Manufacturer, OS Configuration, OS Build Type]
gpathResult.machine.env.variable.each { node ->
println "${node.@name.text()} contains ${node.@value.text()}"
}