我有一个XML解析为字符串..基本结构如下所示

 <envelope>
    <body>
        <entity1>
                <tag1>
                 .
                 .
                </tag 1>
                <tag2>
                 .
                 .
               </tag2>
        </entity1>
        <entity 2>
               <tag1>
                 .
                 .
               </tag1>
               <tag2>
                 .
                 .
               </tag2>
        </entity2>


我需要删除标签,比如说tag2,即整个..块。
我正在使用while循环来执行此操作,例如

 while(str.indexOf("<tag2>")>=0)
    {
       strRepl=str.substring(str.indexOf("<tag2>"),str.indexOf("</tag2>")+7);
       str=xmlString.replaceFirst(strRepl,"");
    }


这是可行的,但我想了解是否有更好的方法使用字符串来实现这一点?
请提出建议。

最佳答案

您可以为此使用Regex。 Java提供了Pattern和Matcher类,可以为您完成这项工作。

    String yourString = "<envelope><body><entity1></entity1></body></envelope>";
    String REGULAR_EXPRESSION= "(\\<body>.+?\\</body>)";
    Pattern pattern = Pattern.compile(REGULAR_EXPRESSION, Pattern.DOTALL | Pattern.MULTILINE);
    Matcher matcher = pattern.matcher(hello);
    if (matcher.find()) {
       System.out.println(yourString.replaceAll(matcher.group(1), ""));
    }


此处(\\<body>.+?\\</body>)表示<body>标记内包含的所有内容,包括标记。
matcher.group(1)行表示匹配字符串的位置。

如果要替换所有出现的内容,只需使用

    yourString = matcher.replaceAll("");


并替换第一次出现仅使用:

    yourString = matcher.replaceFirst("");


而且我不确定它是否适用于字符串中的新行“ \ n”内容,如果字符串为单行,则可以使用:

System.out.println(yourString.replaceAll(REGULAR_EXPRESSION, ""));

09-30 18:02
查看更多