我必须解析一个xml,该xml的xml元素的属性值可以是带有空格和换行符的多行。
我正在使用minidom进行解析,但是我得到的多行属性值没有换行符。
如何使用minidom获得此类值?如果不是那么简单,哪个其他库支持这样的属性?
答案 0 :(得分:1)
这不是minidom
或任何领域的问题。这是XML
的标准,它告诉该属性值
对于空白字符(#x20,#xD,#xA,#x9),请附加一个空格 字符(#x20)归一化值
https://www.w3.org/TR/2008/REC-xml-20081126/#attdecls
这意味着,至少在解析器中,您不会在XML属性的值中找到\n
(换行符),\r
(回车符)或\t
(制表符)字符遵守规则。
答案 1 :(得分:0)
根据XML-Spec - 3.3.3 Attribute-Value Normalization,不允许使用换行符并将其替换为空格。
在将属性值传递给应用程序之前,或者 检查有效性,XML处理器必须规范化属性 通过应用以下算法或使用其他方法来获得价值 这样传递给应用程序的值与 由算法产生。
所有换行符必须已根据#xA的输入进行了归一化,如所述 在2.11行尾处理中,因此该算法的其余部分都可以运行 以这种方式标准化的文本。
以包含空字符串的标准化值开头。
对于每个字符,实体引用或字符引用, 非标准化的属性值,从第一个开始并继续 到最后,请执行以下操作:
对于字符引用,请将引用的字符附加到 归一化值。
对于实体引用,将此算法的步骤3递归地应用于 实体的替换文本。
对于空格字符(#x20,#xD,#xA,#x9),请添加一个空格 字符(#x20)归一化后的值。
对于另一个字符,请将该字符附加到归一化值。
(重点是我的)
也请参见open "bug" xml.dom.minidom does not escape CR, LF and TAB characters within attribute values)