我正在使用XmlSlurper解析一段XML,需要找到一个xml元素值。 这方面的挑战是我不总是确定xml文档中的大小是否正确,所以我需要以任何可能的方式找到该元素。
示例:
<start>
<Header>
<Elem>1234</Elem>
</Header>
</start>
获取 Elem 的值将是:
def parsedXml = new XmlSlurper().parseText(xml)
parsedXml.Header.Elem
但是当套管不同时我也需要找到它。那么有什么方法可以表示当套管不同时能找到Elem的值?
<start>
<header>
<elem>1234</elem>
</header>
</start>
def parsedXml = new XmlSlurper().parseText(xml)
parsedXml.header.elem
答案 0 :(得分:2)
可能有一个更好的解决方案(例如,似乎使用XPath应该可以compare node names case insensitively),但将文档转换为小写将起作用。如果您关心文档中文本节点的大小写,则只能将标记元素转换为小写:
def toLowerCaseXmlTags(xmlText) {
xmlText.replaceAll(/<[^<>]+>/) { it.toLowerCase() }
}
text = """
<start>
<Header>
<Elem>1234</Elem>
<SomeText>This should PRESERVE casing</SomeText>
</Header>
</start>
"""
def xml = new XmlSlurper().parseText(toLowerCaseXmlTags(text))
assert xml.header.elem.text() == '1234'
assert xml.header.sometext.text() == 'This should PRESERVE casing'
快速又脏,但它有效:P
答案 1 :(得分:2)
XML区分大小写,XmlSlurper结果的属性查找也是如此。您需要使用GPathResult.find()
方法:
def header = parsedXml.find { it.name().toLowerCase() == 'header' }
def elem = header.find { it.name().toLowerCase() == 'elem' }
查看groovy documentation了解更多可以使用XmlSlurped文档的方法。