代码之家  ›  专栏  ›  技术社区  ›  ChrisG29

删除xml标记之间的文本并保留标记

  •  0
  • ChrisG29  · 技术社区  · 5 年前

    我尝试使用Groovy删除xml标记之间的文本,同时保留标记。我能找到的最接近的答案是:

    Removing all the characters between two specific tags (java regex)

    但这也去掉了标签。解决方法是:

        String content = "<DATE> html content </DATE>"
        content = content.replaceAll("(?s)<DATE>.*?</DATE>", "<DATE></DATE>")
    

    这就完成了工作,但我想知道是否有一种更干净的方法来删除文本并保留标记?

    0 回复  |  直到 5 年前
        1
  •  1
  •   tim_yates    5 年前

    另一种方法,它遍历树中的每个节点,并将其值设置为子节点(这将删除字符串)。。。就像这样:

    def x = '''
      <root>
        <a>I'm text</a>
        <b>
          So am I
          <c woo="yay">And me!</c>
          last one
        </b>
        Some more text
      </root>'''
    
    import groovy.xml.*
    
    def xml = new XmlParser().parseText(x)
    
    xml.'**'.each { node ->
        if (node instanceof Node) {
            node.value = node.children().findAll { it instanceof Node }
        }
    }
    
    println XmlUtil.serialize(xml)
    

    其输出为:

    <?xml version="1.0" encoding="UTF-8"?><root>
      <a/>
      <b>
        <c woo="yay"/>
      </b>
    </root>
    
        2
  •  0
  •   sintasy    5 年前

    如果假设xml的结构总是相同的,那么

    content = new XmlParser().parseText("<DATE> html content </DATE>")
    content.setValue("")
    return XmlUtil.serialize(content)
    

    content = "<DATE></DATE>"