0

Groovy を使用して XML ドキュメントに取り組んでおり、名前空間プレフィックスを持つ特定の属性のノードをテストしています。どのように機能しますか:

groovy スクリプトで:

...
Element.Subelement.each {
  if (it.'@type'=='ns2:xyType')
    ...do what ever...
}

XML ドキュメント:

<Element>
   <Subelement xsi:type="ns2:xyType"> 
      <!-- or another type, want to do something with      
           subelement only if type is "ns2:xyType" -->
   </Subelement>
</Element>

次のようなものを探しています:

if (it.'@xsi:type'=='ns2:xyType')

THXセルドン

4

4 に答える 4

1
def xsi = new groovy.xml.Namespace("http://www.w3.org/2001/XMLSchema-instance")  
node.attributes()[xsi.type] == 'my_type'
于 2014-03-04T10:19:55.647 に答える
1

xsi も ns2 名前空間も宣言されていないように見えるため、文書は少し混乱していますが、完全な文書のどこかで宣言されていると仮定します。

Groovy ドキュメントから

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()

あなたの例では (名前空間の URL を入力する必要があることに注意してください):

def ggg = '''
<Element xmlns:xsi="http://www.example.org/xsi"
    xmlns:ns2="http://www.example.org/NS2">
   <Subelement xsi:type="ns2:xyType"> 
      <SubSub name="bob" />
   </Subelement>
</Element>
'''
def xml = new XmlSlurper().parseText(ggg).declareNamespace(xsi: 'http://www.example.org/xsi', ns2: 'http://www.example.org/NS2')
def elem = xml.'Subelement'
if ( elem.'@xsi:type'.text() == 'ns2:xyType' ){
   // do it  
}
于 2009-01-25T02:57:19.150 に答える