我有一个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, ""));