[英]groovy xml parsing function
我希望有一個Groovy函數,可以接受2個或多個參數,例如input
, find_tag
。
我寫了下面這樣的東西來測試(不起作用),但是它沒有給我D_1164898448
。 請幫我。
def temp="""<Portals objVersion=\"1.1.19\">
<vector xsi:type=\"domainservice:Portals\" objVersion=\"1.1.19\">
<domainName>D_1164898448</domainName>
<address xsi:type=\"metadata:NodeRef\" objVersion=\"1.1.19\">
<host>Komodo</host>
<port>18442</port>
</address>
</vector>
</Portals>"""
def fInput="domainName"
def records = new XmlParser().parseText(temp)
def t=records.findAll{ it.fInput}.text()
println t
更新資料
對於屬性我正在做類似下面的事情
println "id = ${records.attribute("id")}"
但像明智的做法如何為節點呢?
println "host = ${records.vector.address.host.text()}"
如果您不知道要搜索的XML標記的確切路徑,則可以執行以下操作以獲取具有給定名稱的所有標記的內容:
def t = records."**"."$fInput".text()
要從給定的XML節點訪問屬性,您也可以使用@
表示法,例如
records.vector.@objVersion
您需要做的是:
xsi:
前綴時不會引發錯誤。 您可以通過將正確的參數傳遞給XmlParser
構造函數來XmlParser
。 Node
,而不是一個列表,並且使用findAll
所用的方式將不起作用 更正后的代碼:
def temp="""
<Portals objVersion="1.1.19">
<vector xsi:type="domainservice:Portals" objVersion="1.1.19">
<domainName>D_1164898448</domainName>
<address xsi:type="metadata:NodeRef" objVersion="1.1.19">
<host>Komodo</host>
<port>18442</port>
</address>
</vector>
</Portals>
"""
def fInput="domainName"
def records= new XmlParser(false, false).parseText(temp)
def t = records.vector."$fInput".text()
println t
運行它會顯示'D_1164898448',如預期的那樣。
我認為您必須在這里使用XPath表達式,或者如果您在有問題的顯示中准確輸入xml,我建議您像
def temp = ".." //your temp
def m = temp =~ /<domainName>(.*)</domainName>/
print m[0][1] // should be your domain
有關groovy regexp的更多信息http://groovy.codehaus.org/Regular+Expressions
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.