Groovy:XMl:如何在chid标签中删除和替换子标签

时间:2014-05-03 03:14:02

标签: xml grails groovy xml-parsing xmldocument

我有一个xml请求我需要使用此请求创建另一个xml而没有某些子标记

String requestXml = """
<School>
    <Classes>
        <Class>
           <Teachers>
              <Name>Rama</Name>
              <Name>Indhu</Name>
           </Teachers>
           <Name>Anil</Name>
           <RollNumber>16</RollNumber>
        </Class>
        <Class>
            <Teachers>
              <Name>Nisha</Name>
              <Name>Ram</Name>
           </Teachers>
           <Name>manu</Name>
           <RollNumber>21</RollNumber>
        </Class>
   </Classes>
</School>
""" 

这是我的请求,我需要用这个请求创建另一个请求,这就像在myRequest中一样

String myRequest = """
<School>
   <Classes>
      <Class>
         <Name>Anil</Name>
         <RollNumber>16</RollNumber>
      </Class>
      <Class>
         <Name>manu</Name>
         <RollNumber>21</RollNumber>
      </Classes>
</School>
"""

如何使用

实现这一目标
parsed = new XmlSlurper (false, false).parseText( requestXml )

String myRequest = new StreamingMarkupBuilder().bind {
    mkp.yield parsed.Classes.children()
}

如何删除<Teachers>代码?还有如何删除标记<RollNumber>21</RollNumber>并插入新标记<Rank>2</Rank>

1 个答案:

答案 0 :(得分:0)

您可以在需要删除的节点上使用replaceNode()。它适用于Teachers父级下的所有Classes个节点。

import groovy.xml.XmlUtil

def xml = '''
<School>
    <Classes>
        <Class>
           <Teachers>
              <Name>Rama</Name>
              <Name>Indhu</Name>
           </Teachers>
           <Name>Anil</Name>
           <RollNumber>16</RollNumber>
        </Class>
        <Class>
            <Teachers>
              <Name>Nisha</Name>
              <Name>Ram</Name>
           </Teachers>
           <Name>manu</Name>
           <RollNumber>21</RollNumber>
        </Class>
   </Classes>
</School>
'''

def parsed = new XmlSlurper().parseText( xml )

//Remove all Teachers node
parsed.Classes.Class.Teachers.replaceNode { }

XmlUtil.serialize( parsed )