当前位置: 首页 > 面试题库 >

当我将标签添加到已解析的树中时,lxml中的漂亮打印失败

桑璞
2023-03-14
问题内容

我有一个xml文件,正在使用lxml中的etree进行处理,但是当我向其中添加标签时,漂亮的打印似乎无法正常工作。

>>> from lxml import etree
>>> root = etree.parse('file.xml').getroot()
>>> print etree.tostring(root, pretty_print = True)

<root>
  <x>
    <y>test1</y>
  </x>
</root>

到现在为止还挺好。但现在

>>> x = root.find('x')
>>> z = etree.SubElement(x, 'z')
>>> etree.SubElement(z, 'z1').attrib['value'] = 'val1'
>>> print etree.tostring(root, pretty_print = True)

<root>
  <x>
    <y>test1</y>
  <z><z1 value="val1"/></z></x>
</root>

它不再漂亮了。我还尝试过“向后”操作,在其中创建z1标签,然后创建z标签并将z1附加到它,然后将z标签附加到x标签。但我得到相同的结果。

如果我不解析文件,而是一次性创建所有标签,它将正确打印。因此,我认为这与解析文件有关。

如何获得漂亮的打印效果?


问题答案:

它与如何lxml处理空格有关-有关详细信息,请参见lxml FAQ。

要解决此问题,请将文件的加载部分更改为以下内容:

parser = etree.XMLParser(remove_blank_text=True)
root = etree.parse('file.xml', parser).getroot()

我没有对其进行测试,但是通过此更改它应该可以使您的文件缩进一点。



 类似资料:
  • 问题内容: 在使用“难看的” XML读取现有文件并进行一些修改后,漂亮的打印不起作用。我试过了。 我有以下XML: 我这样使用它: 问题答案: 对我来说,这个问题直到我在这里注意到这个小窍门才得以解决: http://lxml.de/FAQ.html#why-doesn-t-the-pretty-print-option-reformat-my-xml- output 简洁版本: 使用以下命令读入

  • 问题内容: 我有一个存储为DOM文档的XML文件,我想将其漂亮地打印到控制台,最好不使用外部库。 我知道这个问题已经在这个网站上问了很多遍,但是以前的答案都没有对我有用。 我正在使用Java 8,所以也许这是我的代码与以前的问题有所不同的地方?我也尝试过使用从Web上找到的代码手动设置变压器,但是这只是引起了错误。 这是我的代码,当前仅在控制台左侧的新行上输出每个xml元素。 问题答案: 我想这个

  • 我有以下代码使用python与lxml漂亮打印文件example.xml: 我之所以使用lxml,是因为我必须保持原始文件的保真度,包括保持CDATA习惯用法。下面是文件示例。我正在使用它的xml: 它生成以下输出: 这几乎就是我想要的,只是我想得到一个子树。我希望能够只获取子树

  • 问题内容: 如果有人对JSON的打印非常了解,那么我将不胜感激! 我正在使用以下功能将JSON字符串移动到文件中,以将复杂的python字符串转换为JSON格式: 问题是我遇到了方括号的语法错误,因为这对我来说是个新话题,我不知道该如何解决。我需要的JSON格式如下: 我正在使用Google Visualization API,您可能对此比较熟悉,但是我需要动态图。上面的代码是API创建图形所需的

  • 假设我有以下代码,它使用pandas绘制了一些非常简单的东西: 如何轻松设置x和y标签,同时保留使用特定颜色贴图的能力?我注意到pandas DataFrames的包装器没有任何特定的参数。

  • 问题内容: 我试图使我的数据集与此示例相对应: 我有一个名称和与那些名称可以引用的特定实体相对应的唯一字母数字值,我们将这些条目称为“ ID”。 因此,例如,可能与ID有关,因为这是一个非常具体的参考,因此没有很多广为人知的具有该名称的图形。然而,可能被附加到,和,引用也许是男人,啤酒和灌木,没有特定的顺序。 看起来像这样(实际的更大): 使用杰克逊,我这样尝试: 但这似乎是错误的,因为我的输出全