用Java解析XML多行字符串
我正在尝试使用经典的DOM解析Java中的多行XML属性。解析工作正常。但是,它破坏了换行符,因此,当我渲染解析的字符串时,换行符会被简单的空格替换用Java解析XML多行字符串,java,xml,parsing,dom,xml-parsing,Java,Xml,Parsing,Dom,Xml Parsing,我正在尝试使用经典的DOM解析Java中的多行XML属性。解析工作正常。但是,它破坏了换行符,因此,当我渲染解析的字符串时,换行符会被简单的空格替换 <string key="help_text" value="This is a multi line long text. This should be parsed and rendered in multiple
<string key="help_text" value="This is a multi line long
text. This should be parsed
and rendered in multiple lines" />
如果我只是使用“\n”将手动键入的字符串传递给render方法,文本将按预期绘制
有什么想法吗?根据XML解析器必须规范化属性空白,例如用空格替换换行符。即,如果需要保留换行符,则不能使用属性值
一般来说,XML中的空白处理会带来很多麻烦。特别是,CR、LF和CRLF之间的差异在任何地方都不会保留
您可能会发现最好将属性中的换行符编码为br/
(即
的编码版本),然后在以后对其进行解码。来源:
3.3.3属性值规范化。您将看到,所有空白都已标准化为单个空格:
在将属性值传递给应用程序或
检查有效性后,XML处理器必须对属性进行规范化
通过应用下面的算法,或使用其他方法来计算
这样传递给应用程序的值与
由算法生成。所有换行符必须已标准化
在输入到#xA时,如2.11行尾处理中所述,其余的
该算法的一部分以这种方式对文本进行规范化
从一个由空字符串组成的规范化值开始
对于中的每个字符、实体引用或字符引用
非规范化属性值,从第一个开始,继续
最后,请执行以下操作:
对于字符引用,请将引用的字符附加到
标准化值
对于实体引用,递归地将此算法的步骤3应用于
实体的替换文本
对于空白字符(#x20、#xD、#xA、#x9),请附加空格
将字符(#x20)设置为规范化值
对于另一个字符,将该字符附加到规范化值
我在过去使用过JDom。它在解码多行属性时为您节省了很多麻烦,并真正增强了Java上的XML解析/编写。JDom还与Android开发兼容,它非常小(只有一个jar文件)
@Ben根据XML规范,XML处理器必须将CR/LF组合规范化为LF。是的。因此,如果差异对您的应用程序很重要,那么您必须找到其他编码方法—您自己制作的特殊标记是理想的方法。目前,我使用了第一个(也是非常难看的)“br/”解决方案作为修复方案,但我肯定会研究JDom。非常感谢。@Fsero-您能简要描述一下您是如何使用JDom来管理它的吗?我刚刚编写了一个小单元测试,在Xerces land中,属性中的换行符甚至在进入JDom之前就被清除了。
attributes.getNamedItem("value").getTextContent()