كيف يمكنني التحقق من وجود عنصر رائع هو XmlSlurper?

StackOverflow https://stackoverflow.com/questions/480431

  •  20-08-2019
  •  | 
  •  

سؤال

أحاول تحديد ما إذا كان عنصر XML موجود مع رائع هو XmlSlurper.هل هناك طريقة لعمل هذا ؟ على سبيل المثال:

<foo>
  <bar/>
</foo>

كيف يمكنني التحقق من ما إذا كان عنصر شريط موجود ؟

هل كانت مفيدة؟

المحلول

ووAPI هو مجنون قليلا، ولكن أعتقد أن هناك بضعة طرق أفضل للبحث عن الأطفال. ما الذي تحصل عليه عندما كنت أسأل عن "xml.bar" (والتي وجدت) أو "xml.quux" التي لم يحدث ذلك، هو <وأ href = "http://groovy.codehaus.org/gapi/groovy/ UTIL / slurpersupport / NodeChildren.html "يختلط =" noreferrer "> groovy.util.slurpersupport.NodeChildren الكائن. في الأساس عبارة عن مجموعة من العقد تلبية المعايير التي طلبتم.

وطريقة واحدة لمعرفة ما إذا كان وجود عقدة معينة هي للتحقق من حجم NodeChildren هو الحجم المتوقع:

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert 1 == xml.bar.size()
assert 0 == xml.quux.size()

وهناك طريقة أخرى تتمثل في استخدام أسلوب البحث ومعرفة ما إذا كان اسم العقدة التي يحصل عاد (يتم إرجاع للأسف دائما شيئا)، هو واحد كنت تتوقع:

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert ("bar" == xml.children().find( {it.name() == "bar"})?.name())
assert ("quux" != xml.children().find( {it.name() == "quux"})?.name())

نصائح أخرى

على isEmpty الأسلوب على GPathResult يعمل.

def text = "<foo><bar/></foo>"
def xml = new XmlSlurper().parseText(text)
assert false == xml.bar.isEmpty()

هذا يزعجني ، لأن عنصر شريط هو فارغة - لا يجب الجسم.ولكن أعتقد أن GPathResult ليست فارغة, لذلك ربما هذا يجعل الشعور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top