xml - 使用XmlSlurper/GPath查找不区分大小写的xml元素值?

标签 xml grails groovy xmlslurper gpath

我正在使用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

最佳答案

可能有更好的解决方案(例如,似乎可以使用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

关于xml - 使用XmlSlurper/GPath查找不区分大小写的xml元素值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972146/

相关文章:

php - 使用表单发布XML值

php - 子节点名称未知时提取xml数据

java - 如何删除 ImageView 的空白区域而不裁剪它们

multithreading - grails sessionFactory.currentSession.flushMode无法与线程一起使用?

jenkins - 尝试在管道代码中使用函数时 Jenkins run 出错,可能是什么原因?

java - Solr 从索引中提取数据到 XML 文件

security - Grails 如何处理安全性,我为什么要使用插件?

grails - 通过 Grails 中 gsp 的参数发送 LocalTime 对象

java - XmlSlurper获取节点值说明

java - 如何将庞大的JSON对象转换为Java类对象