3

我有一个字符串,它是 XML 数据。删除一些节点并添加一些节点后。xml 数据中有很多空格(在节点删除期间创建。)

<A>
<B>
</B>

<!-- some node i deleted and lot of white spaces -->



<c>
</c>


<!-- some more node i deleted and lot of white spaces -->




<E>
</E>

字符串操作后所需的输出

<A>
<B>
</B>
<c>
</c>
<E>
</E>
</A>

我可以使用 replaceAll("\s","") 但这甚至会删除换行符并使 xml 脱离结构以在 UI 中显示它。

有没有办法在不修剪换行符的情况下修剪它?

编辑:此 XML 数据是 OMElement 的一部分

4

5 回答 5

3

你能澄清你的意思吗?如果您指的是换行符以外的空格请尝试以下操作。

str = str.replaceAll("[ \t\x0B\f\r]", "");

...或者,您的意思是要删除无关的新行?

str = str.replaceAll("\n{2,}", "\n");

...或者您只想删除文字' '空格?

str = str.replace(" ", "");
于 2012-09-12T05:46:22.727 回答
2

尝试使用someString.replaceAll("\\u0020","") 这个字符串是空格的结束,应该做这个工作

编辑:如果你需要其他看看这个问题。您会在 tchrist 的回答中找到其他人。

于 2012-09-12T05:46:27.313 回答
2

我建议使用正则表达式str.replaceAll("(</[^>]+>)\\s+(<[^>]+>)","$1\n$2")来检测标签之间的空格并删除它们。它只留下一个行尾

于 2012-09-12T05:47:14.500 回答
1

如果您使用DocumentBuilder来修改 XML,那么您也可以使用下面的方法。

DocumentBuilderFactory.setIgnoringElementContentWhitespace

指定此工厂创建的解析器必须消除元素内容中的空格(有时松散地称为“可忽略的空格”)

factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
于 2012-09-12T06:25:06.320 回答
0

这样做的成本很高。

Scanner scanner = new Scanner(str);
StringBuffer strBuff = new StringBuffer();
while(scanner.hasNextLine()){
       String line = scanner.nextLine();
           if(line.length() > 0 && !line.trim().equals("")){
                 strBuff.append("\n");
         strBuff.append(line);
       }
}

最终,当循环结束时,我们可以从 xml 中删除空行,并且 xml 将形成良好的格式。如您所见,这对于大型 xml 并不理想,因为许多 xml 字符串对象是在内部创建的。

问候
Dheeraj Joshi

于 2012-09-24T11:21:13.187 回答