使用minidom python解析xml元素属性

时间:2018-12-26 14:12:27

标签: python xml xml-parsing

我必须解析一个xml,该xml的xml元素的属性值可以是带有空格和换行符的多行。

我正在使用minidom进行解析,但是我得到的多行属性值没有换行符。

如何使用minidom获得此类值?如果不是那么简单,哪个其他库支持这样的属性?

2 个答案:

答案 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处理器必须规范化属性   通过应用以下算法或使用其他方法来获得价值   这样传递给应用程序的值与   由算法产生。

     
      
  1. 所有换行符必须已根据#xA的输入进行了归一化,如所述   在2.11行尾处理中,因此该算法的其余部分都可以运行   以这种方式标准化的文本。

  2.   
  3. 以包含空字符串的标准化值开头。

  4.   
  5. 对于每个字符,实体引用或字符引用,   非标准化的属性值,从第一个开始并继续   到最后,请执行以下操作:

         
        
    • 对于字符引用,请将引用的字符附加到   归一化值。

    •   
    • 对于实体引用,将此算法的步骤3递归地应用于   实体的替换文本。

    •   
    • 对于空格字符(#x20,#xD,#xA,#x9),请添加一个空格   字符(#x20)归一化后的值。

    •   
    • 对于另一个字符,请将该字符附加到归一化值。

    •   
  6.   

(重点是我的)

也请参见open "bug" xml.dom.minidom does not escape CR, LF and TAB characters within attribute values