2011-05-17 66 views
0

我有这样的XML,我把它在XML a GPathResult object我怎样才能Microsoft(R) Windows(R) Server 2003 Enterprise x64 Edition基于使用常规XML啜如何遍历XML节点并检查属性值?

<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> 

这里与field值检查为OS Name被解析代码

def file = new File(filepath) 
def gpathResult = new XmlSlurper().parse(file) 

[email protected]() 
      log.info [email protected]() 


      System.out.println("HI 1"[email protected]()); 
      System.out.println("HI 2"[email protected]()); 

      if([email protected]().equals("OS")) 
      { 
       [email protected]ext() 

      } 
      if([email protected]().equals("COMPUTERNAME")) 
      { 
       [email protected].text() 
      } 

这里HI 1打印所有的环境名称属性值,但HI 2只打印HI 2

这里是快照 enter image description here

这里是解决后,我走过

 def vals1=gpathResult.machine.env.variable.findAll{[email protected]=='COMPUTERNAME'}[email protected]() 
      println vals1 
      csmSummary.hostname=vals1 
      def vals2=gpathResult.machine.env.variable.findAll{[email protected]=='OS'}[email protected]() 
      println vals2 
      csmSummary.osname=vals2 
+0

你有你所使用的XML解析成'gpathResult'变量的代码? – 2011-05-17 08:40:19

+0

@tim_yates:我有,我会在一分钟内发布它 – abi1964 2011-05-17 08:43:13

+0

@tim:我编辑我的问题 – abi1964 2011-05-17 08:48:05

回答

2

奇怪......如果我这样做(用Groovy 1.8)

def gpathResult = new XmlSlurper().parseText($/<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>/$) 

println "HI 1 ${[email protected]*.text()}" 
println "HI 2 ${[email protected]*.text()}" 

它打印出:

HI 1 [ALLUSERSPROFILE, APPDATA, OS, COMPUTERNAME] 
HI 2 [OS Name, OS Version, OS Manufacturer, OS Configuration, OS Build Type] 

你可以试试该代码(假设你是你星1.8,Groovy的最新版本 - 如果不是,你将需要使用""",而不是$/的字符串分隔符,而逃避\字符)

[编辑]这可能只是因为你正在使用,而不是gpathResult.machine.environment.variablegpathResult.machine.env.variable

遍历ENV节点,你会做这样的事情:

gpathResult.machine.env.variable.each { node -> 
    println "${[email protected]()} contains ${[email protected]()}" 
} 
+0

HI 1正确打印,但是HI 2仍然不打印任何东西,而在我的系统中它的'environment'而不是'env'。此外,我正在使用groovy 1.8,我会在一分钟快照,检查我的问题 – abi1964 2011-05-17 09:11:21

+0

@Abhishek它一定是你不告诉我们的东西。由于XML和代码不匹配,我猜测其中任何一个都有问题,并且您没有在此发布正确的信息以帮助我们。是否与**一样运行**上面的代码不会为'HI 2'打印任何内容? – 2011-05-17 09:13:22

+0

好吧只是告诉我如何遍历每个environment.variable的元素,所以我可以尝试别的,可能是作品 – abi1964 2011-05-17 09:14:35

相关问题