如何在Java中有效删除XML String中的立即标记

时间:2014-05-26 07:31:45

标签: java xml string xml-parsing

我将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,"");
    } 

这是有效的,但我想了解是否有更好的方法来使用字符串来实现它? 请建议。

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式。 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, ""));