首页 > 解决方案 > 转义字符串以在 xml 标记中使用

问题描述

初步:这不是这里已经回答的问题:

转义字符串以在 XML 中使用

实际问题:

我继承了一个 xml 模式,不幸的是,它将 xml 本身的文件名编码为一个元素(我知道,这是非常不寻常的,也不是一个好主意):

<?xml version="1.0" encoding="utf-8"?>
<this_actual_xml_filename.xml>
    <content>
    </content>
</this_actual_xml_filename.xml>

我知道由于多种原因这不是很有用,但是由于我无法通过在使用该文件的工具上投入大量精力来更改结构,因此我暂时坚持使用它。这不是一个好主意的原因之一是文件名比 xml 元素名称受到的限制要少得多,因此很容易想象会出现问题,例如生成一个名为的 xmlvalid_filename_(but_invalid_xml).xml会导致这种 xml 格式:

<?xml version="1.0" encoding="utf-8"?>
<valid_filename_(but_invalid_xml).xml>
    <content>
    </content>
</valid_filename_(but_invalid_xml).xml>

我的问题是,在 Python 中是否有办法转义 xml 元素中不允许的任何字符。以某种透明的方式转义它可以让我在读取 xml 的工具中重建原始文件名。

我可以使用标准推出自己的:https ://www.w3schools.com/xml/xml_elements.asp但我想知道是否有现成的东西来应对这种不寻常的情况。

附录:让我强调一下,这种结构是非常糟糕的风格,强烈建议重构文件格式而不是寻找解决方法。因此,我认为在任何库中都没有针对此问题的现成解决方案,因为构造本身违反了基本的 xml 设计准则。

如果确实存在解决方案,我发布了这个问题,这样我就不必重新发明轮子了。如果没有其他问题,我将接受一个简单的“不存在”作为答案。

标签: pythonxml

解决方案


我见过的一个约定是用十六进制字符代码替换所有“特殊”字符(对于“特殊”_HHHH_的某些定义)。HHHH但是我不知道有任何方便的库可以为您执行此操作。并且将元素写出来可能会容易得多

<file name="valid_filename_(but_invalid_xml).xml">
 ...
</file>

推荐阅读