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

防止lxml创建自动关闭标签

公良飞尘
2023-03-14
问题内容

我有一个(旧的)工具,该工具不了解像这样的自动关闭标签<STATUS/>。所以,我们需要序列与这样的开启/关闭的标签我们的XML文件:<STATUS></STATUS>

目前我有:

>>> from lxml import etree

>>> para = """<ERROR>The status is <STATUS></STATUS>.</ERROR>"""
>>> tree = etree.XML(para)
>>> etree.tostring(tree)
'<ERROR>The status is <STATUS/>.</ERROR>'

如何使用打开/关闭的标签进行序列化?

<ERROR>The status is <STATUS></STATUS>.</ERROR>

由wildwilhelm给出,如下:

>>> from lxml import etree

>>> para = """<ERROR>The status is <STATUS></STATUS>.</ERROR>"""
>>> tree = etree.XML(para)
>>> for status_elem in tree.xpath("//STATUS[string() = '']"):
...     status_elem.text = ""
>>> etree.tostring(tree)
'<ERROR>The status is <STATUS></STATUS>.</ERROR>'

问题答案:

似乎<STATUS>标签已分配了的text属性None

>>> tree[0]
<Element STATUS at 0x11708d4d0>
>>> tree[0].text
>>> tree[0].text is None
True

如果text<STATUS>标记的属性设置为空字符串,则应获得所需的内容:

>>> tree[0].text = ''
>>> etree.tostring(tree)
'<ERROR>The status is <STATUS></STATUS>.</ERROR>'

考虑到这一点,您可能可以text在编写XML之前遍历DOM树并修复属性。像这样:

# prevent creation of self-closing tags
for node in tree.iter():
    if node.text is None:
        node.text = ''


 类似资料:
  • 我想做的是:打开大文件的InputStream,读取10MB的块,上传一个块,读取下一个块。 我为这个任务编写了很好的代码,但问题是ContentResolver返回ParcelFileDescriptor。AutoCloseInputStream作为InputStriam。这个实现打破了InputStream的契约,因为它在first.read()之后自动关闭,所以当我尝试读取下一个块时,我得到

  • 我使用JSoup从html文档中提取某些标记。但是,我需要用团队创建的一些标记来更改其中的一些。 示例 检查我的标签是否需要自动关闭标签。有线索吗?谢谢

  • 问题内容: 如果将元素设置为,并且有一个垂直滚动条,则该元素的宽度将等于视口加上滚动条的宽度。 有可能防止这种情况吗? 是否可以在不禁用整个页面水平滚动的情况下防止这种情况?除了更改css / markup以使元素占主体宽度的100%之外,我什么都没想到。 已在Windows 8.1的Chrome版本43.0.2357.81 m和FF 36.0.1和Opera 20.0.1387.91中进行测试

  • 如果将元素设置为并且存在垂直滚动条,则元素的宽度将等于视口加上滚动条的宽度。 有没有可能防止这种情况发生? 有没有可能在不禁用整个页面的水平滚动的情况下防止这种情况发生?除了改变我的CSS/标记,使元素100%的身体宽度,我什么也想不出来。 在Windows 8.1上的Chrome版本43.0.2357.81m&FF 36.0.1和Opera 20.0.1387.91中进行了测试 下面是要求的代码

  • 我正在使用Xerces库在文档中编写XML。为此,我使用OutputFormat类在XMLSerializer中传递OutputFormat的对象。但我所有的空xml元素都转换为自动关闭的xml元素。 我想要这个: 但它的到来就像 我尝试了以下代码: 有人能帮我解决这个问题吗。 谢谢

  • 问题内容: 我正在尝试在从属计算机上的Jenkins工作中启动Tomcat。我通过打开slave-agent.jnlp手动启动Jenkins slave 这是我在“执行Windows批处理命令”中尝试过的操作: Tomcat开始运行构建,并且将构建标记为成功,但是随后几秒钟后Tomcat自动关闭。 问题答案: 这是 Jenkins进程树杀手 。这是设计使然。您可以通过使用额外参数启动Jenkins