【问题标题】:Remove XML Tag and Content in XML String using Java Regex使用 Java Regex 删除 XML 字符串中的 XML 标记和内容
【发布时间】:2017-08-11 04:46:31
【问题描述】:

我有一个 400 行的 XML 字符串,它确实包含重复两次的以下标签。我想删除那些标签

<Address>
<Location>Beach</Location>
<Dangerous>
    <Flag>N</Flag>
</Dangerous>
</Address>

我正在使用下面的正则表达式模式,但它没有替换

xmlRequest.replaceAll("&lt;Address&gt;.*?&lt;/Address&gt;$","");

我可以通过在“查找/替换”对话框中选择Regular Expression 单选按钮旁边的[x].matches newline 复选框在记事本++ 中执行此操作

谁能建议我的正则表达式有什么问题

【问题讨论】:

  • 再一次:使用正则表达式处理 XML/HTML。使用 XML 工具。 XML/HTML 是一种上下文无关的语言,正则表达式不是处理此类语言的正确工具。正则表达式只能处理常规语言。
  • Jsoup 似乎是个不错的选择
  • 你能发布预期的输出吗?
  • @efektive,我需要完全删除 400 行 xml 字符串中的那个块

标签: java regex xml


【解决方案1】:

按照您的建议去做可能是不恰当的。 (请参阅https://stackoverflow.com/a/1732454/6552039 以获得欢乐和启发。)

您应该能够使用 org.w3c.dom.Document 解析器来获取您的 xml,然后执行 getElementsByTagName("Address"),然后将其 .remove(Element) 用于第二个解析器。 (假设对“以下标签重复两次”的特定解释。

【讨论】:

    【解决方案2】:
    xmlRequest.replaceAll("<Address>[\\s\\S]*?</Address>","");
    

    .* 不包含 \n\r ,所以需要使用 [\s\S] 来匹配所有

    【讨论】:

    • 工作正常 Kerwin。谢谢
    • 不,它不能正常工作。它适用于您应用它的一个测试用例。它会在其他测试用例上失败,任何必须调查该错误的人都会诅咒编写代码的人。不要使用正则表达式来处理 XML,使用 XML 解析器。
    • 为了对此进行扩展,这里有一些它不能正确处理的情况: 具有属性的地址元素。在开始或结束标记中带有空格的地址元素。包含嵌套地址元素的地址元素。出现在 cmets 或 CDATA 部分中的地址标记。使用自闭合标签的空地址元素。
    • 希望开发者可以自己思考,确定这是否有效。单元测试怎么样?我想在登录之前从 SOAP 请求中删除密码怎么样?并非一切都至关重要。
    【解决方案3】:

    JSoup 解决方案

    public static void main(String[] args){
        String XmlContent="<Address> <Location>Beach</Location><Dangerous> 
            <Flag>N</Flag> </Dangerous> </Address>";
    
        String tagToReplace="Address";
        String newValue="";
    
        Document doc = Jsoup.parse(XmlContent);
        ArrayList<Element> els =doc.getElementsByTag(tagToReplace);
        for(int i=0;i<els.size();i++){
            Element el = els.get(i);
            el.remove();
        }
        XmlContent=doc.body().children().toString();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 2011-09-23
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 2013-03-24
      相关资源
      最近更新 更多