1

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
4

2 に答える 2

2

おそらくもっと良い解決策があります (たとえば、XPath を使用すると、ノード名の大文字と小文字を区別せずに比較できるはずです) が、ドキュメントを小文字に変換することはできます。ドキュメント内のテキスト ノードの大文字と小文字を区別する必要がある場合は、タグ要素のみを小文字に変換できます。

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

于 2012-06-10T21:34:44.870 に答える
2

XML では大文字と小文字が区別され、XmlSlurper の結果のプロパティ ルックアップでも大文字と小文字が区別されます。GPathResult.find()次の方法を使用する必要があります。

def header = parsedXml.find { it.name().toLowerCase() == 'header' }
def elem = header.find { it.name().toLowerCase() == 'elem' }

XmlSlurped ドキュメントを使用するその他の方法については、Groovy ドキュメントを参照してください。

于 2012-06-10T21:51:34.243 に答える