2010-09-03 2 views
2

Я пытался сделать некоторые модификации xml с XML Slurper groovy.Groovy Xml Анализ с пространством имен

В принципе, я просматриваю xml и ищут теги или атрибуты, которые есть? как значение, а затем заменить его на некоторое значение.

У меня есть работа для xml, у которой нет пространств имен, но как только я включаю их, все становится неуклюжим. Например, это:

String foo = "<xs:test xmlns:xs="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:foo="http://myschema/xmlschema" name='?'> 
     <foo:tag1>?</foo:tag1> 
     <foo:tag2>?</foo:tag2> 
    </xs:test>"; 

производит:

<Envelope/>

Вот заводной код, я использую. Это появляется на работу, когда я не использую пространство имен:

public def populateRequest(xmlString, params) { 

    def slurper = new XmlSlurper().parseText(xmlString) 
    //replace all tags with ? 
    def tagsToReplace = slurper.depthFirst().findAll{ foundTag -> 
     foundTag.text() == "?" 
    }.each { foundTag -> 
     foundTag.text = {webServiceOperation.parameters[foundTag.name()]} 
     foundTag.replaceNode{ 
      "${foundTag.name()}"(webServiceOperation.parameters[foundTag.name()]) 
     } 
     } 
     //replace all attributes with ? 
     def attributesToReplace = slurper.list().each{ 
      it.attributes().each{ attributes -> 
      if(attributes.value == '?') 
      { 
      attributes.value = webServiceOperation.parameters[attributes.key] 
      } 
     } 
     } 

     new StreamingMarkupBuilder().bind { mkp.yield slurper }.toString() 
    } 

ответ

2

от заводной documentation

def wsdl = ''' 
<definitions name="AgencyManagementService" 
    xmlns:ns1="http://www.example.org/NS1" 
    xmlns:ns2="http://www.example.org/NS2"> 
    <ns1:message name="SomeRequest"> 
     <ns1:part name="parameters" element="SomeReq" /> 
    </ns1:message> 
    <ns2:message name="SomeRequest"> 
     <ns2:part name="parameters" element="SomeReq" /> 
    </ns2:message> 
</definitions> 
''' 

def xml = new XmlSlurper().parseText(wsdl).declareNamespace(ns1: 'http://www.example.org/NS1', ns2: 'http://www.example.org/NS2') 
println xml.'ns1:message'.'ns1:part'.size() 
println xml.'ns2:message'.'ns2:part'.size() 
+0

Спасибо, я увидел, что в документации, но вопрос с тем, что я бегом через кратному XML-строки, которые я не содержим. Они могут иметь или не иметь пространства имен, и у них разные теги. Что я могу найти элементы просто отлично, он терпит неудачу, когда я пытаюсь его обновить. – eric

+0

Я думаю, первая проблема заключается в том, что вы код только получает корневой узел, поэтому вы видите только в качестве ответа –

Смежные вопросы