gpt4 book ai didi

python - 使用数字作为标签名称来解析损坏的 XML

转载 作者:行者123 更新时间:2023-12-01 02:20:37 25 4
gpt4 key购买 nike

我有很多 xml 文件,它们的键都是数字格式的,即 <12345>Golly</12345>

使用ElementTree解析时我收到错误 not well-formed (invalid token) 。我假设这是因为 key 是数字格式而不是单词。当我尝试通过使用正则表达式添加双引号来将键更改/替换为字符串时

xmlstr = re.sub('<([\d]+)>','<"' + str(re.search('<([\d]+)>', xmlstr).group(1))+ '">',xmlstr)
xmlstr = re.sub('</([\d]+)>','</"' + str(re.search('</([\d]+)>', xmlstr).group(1))+ '">',xmlstr)

所有其他键都使用第一个找到的键替换。(所有键最终都是相同的。而原始文件中的键本身在每个文档中都是唯一的。)我猜这些文件是直接从 json 转换为 xml 的。键应代表 ID 号,值是与 ID 号关联的名称

我想知道是否有一种方法可以使用数字作为键,或者是否有一种方法可以一个一个地替换键而不是用一个找到的字符串替换所有匹配项。
.group(1)
返回导致问题的第一个事件。请帮忙。

最佳答案

我认为您需要同时拥有数字标签名称和在不同保存组中捕获的内容,然后在替换字符串中引用它们:

In [2]: data = "<content><12345>Golly</12345><67890>Jelly</67890></content>"

In [3]: re.sub(r"<(\d+)>(.*?)</\d+>", r'<item id="\1">\2</item>', data)
Out[3]: '<content><item id="12345">Golly</item><item id="67890">Jelly</item></content>'

但是,如果无法访问输入 XML 数据的可能变化,就很难得出 100% 可靠的结果。例如,我不确定这个表达式是否能很好地处理嵌套的数字标签。

您可能还想探索解析lxml's "recovery" mode中的文档的可能性。 。

<小时/>

另一个可能有助于处理这种情况的工具是 BeautifulSoup - 您可以尝试非传统方法 - 使用宽松解析 XML 数据 html5lib解析器:

In [1]: from bs4 import BeautifulSoup

In [2]: data = "<content><12345>Golly</12345><67890>Jelly</67890></content>"

In [3]: soup = BeautifulSoup(data, "html5lib")
In [3]: print(soup.prettify())
<html>
<head>
</head>
<body>
<content>
&lt;12345&gt;Golly
<!--12345-->
&lt;67890&gt;Jelly
<!--67890-->
</content>
</body>
</html>

当然,这不是所需的输出,但可能是您可以使用并提取键和单词的东西。

关于python - 使用数字作为标签名称来解析损坏的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47982331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com