代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

我们能做这个切片切槽机吗?

  •  2
  • Christopher Klewes  · 技术社区  · 15 年前

    有什么改进可以改进这个代码吗?也许有一些groovy语言特性?此代码段将XML文件展平到:node/node/node

    def root = new XmlParser().parse("src/your_xml.xml")
    
    root.depthFirst().each { n ->
        def name = n.name()
        while(n?.parent()){
            name = "${n?.parent()?.name()}/${name}";
            n = n?.parent()
        }
        println name
    }
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   John Wagenleitner    15 年前

    我可以重构代码以使用更实用的样式。

    def x = """
    <test>
        <test1>
            <test2/>
        </test1>
        <test2>
            <test3/>
            <test4>
                <test5/>
            </test4>
        </test2>
    </test>
    """.trim()
    
    def root = new XmlParser().parseText(x)
    
    def nodePath(node) {
        node.parent() ? "${nodePath(node.parent())}/${node.name()}" : node.name()
    }
    
    root.depthFirst().each {
        println nodePath(it)
    }
    
    assert nodePath(root.test2[0].test4[0].test5[0]) == "test/test2/test4/test5"    
    
        2
  •  1
  •   Noon Silk    15 年前

    --编辑:忽略我,我错了[见评论](但不是最后一行);

    我怀疑你会写作(但我可能是错的,我对这种语言没有经验)

    while(n = n?.parent()){
    

    但是,老实说,不要用酷的东西,用可读的东西。