0

XML ドキュメントを読み取り、値を変更してから保存する必要があるグルーヴィーなシステム バッチ スクリプトがあります。

値を読み取って書き込む方法を理解しました。「メンバー」とその値を削除する方法を一生理解できません。すべてのメンバーを削除して、それを理解できないカスタム ファイル名に置き換える必要があります。

XML は次のようになります。

<types>
    <members>*</members>
    <members>Account</members>
    <members>Activity</members>
    <members>Contact</members>
    <members>Task</members>
    <members>User</members>
    <members>ContentVersion</members>
    <name>CustomObject</name>
</types>

「CustomObject」という名前を検索し、次の文字列を使用して兄弟のすべてのメンバーを削除します。

def replace = "MyCustomFile"

したがって、XML は次のようになります。

<types>
    <members>MyCustomFile</members>
    <name>CustomObject</name>
</types>

オンラインで見つけた以下のコードを試しました

println "Testing Slurper"
def root = new XmlSlurper().parse(new File(theFile))
root.types.each { types ->
println "names: ${types.name}"
    types.members.each {
        println "members: " + it.text()
    }
}

    println "Testing replace"
    def book = "Booking__c"


    def cleanUpNode(node) {
        println node
        def childs = node.children()

        def remove = []
        childs.each {
            if (it instanceof Node) {

                if (!it.children()) {
                    remove.add it
                } else {
                    cleanUpNode it
                    if (!it.children()) {
                        remove.add it
                    }
                }
            }
        }

        remove.each { node.remove(it) }
    }

    cleanUpNode root.types.name

実際には何も削除していませんが、これは出力でした:

  <tag0:types>
    <tag0:members>*</tag0:members>
    <tag0:members>Account</tag0:members>
    <tag0:members>Activity</tag0:members>
    <tag0:members>Contact</tag0:members>
    <tag0:members>Task</tag0:members>
    <tag0:members>User</tag0:members>
    <tag0:members>ContentVersion</tag0:members>
    <tag0:name>CustomObject</tag0:name>
  </tag0:types>

私はまだこれのコツをつかもうとしているので、どんな助けでも素晴らしいでしょう

4

1 に答える 1

1

次のようなことができます。

List newMembersToAdd = ['myCustomFile', 'anotherCustomFile']

Node xml = new XmlParser(false, false, false).parse("myXml.xml")

xml.members?.each {
    xml.remove it
}

newMembersToAdd.each { String newMember ->
    new Node(xml, 'members', newMember)
}

new File("myNewXml.xml").withWriter { writer ->
    def printer = new XmlNodePrinter( new PrintWriter(writer) )
    printer.preserveWhitespace = true
    printer.print( xml )
}
于 2018-03-23T21:45:35.750 に答える