【问题标题】:Cannot parse xml file无法解析xml文件
【发布时间】:2021-10-06 04:55:44
【问题描述】:

上周我曾经运行过这个文件,结果很完美,但今天突然不行了,我没有对其进行任何更改。 你能帮我吗?

这是我的python代码:

from lxml import etree
import numpy as np

#Parsing the xml file and creating lists
tree = etree.parse("AnyConv.com__CCSOPM Section 1_Master (1).xml")
root = tree.getroot()
Lista = []
tags = []

#Get the unique tags values
for element in root.iter():
    Lista.append(element.tag)
tags = np.unique(Lista)

#Show the unique tag[attributes] pairs
for tag in tags:
    print(tag,root.xpath(f'//{tag}')[0].attrib.keys())
    
#Changes the tag name to the comply365's tag's name
for p in tree.findall(".//sect1"):
    p.tag = ("section")
for p in tree.findall(".//sect1"):
    p.tag = ("section")
for p in tree.findall(".//informaltable"):
    p.tag = ("table")    
    
#Modify the tag's attributes to its desired form
for cy in root.xpath('//section'):
    cy.attrib['xmlns']='http://www.w3.org/2001/XMLSchema-instance'
    cy.attrib['id']='123'
    cy.attrib['type']='policy'
    cy.attrib['xsi']='urn:fontoxml:cpa.xsd:1.0'


for t in root.xpath('//title'):
    t.attrib['id']='123456789'
    
for p in root.xpath('//para'):
    p.attrib['id']='987654321'
    
for p in root.xpath('//table'):
    p.attrib['id']='11111'
    
for ct in root.xpath('//concept'):
    ct.attrib.pop("id", None)

#Print the new xml to make sure it worked:
#print(etree.tostring(root).decode())

    
tree.write("Resultado de tags XML-COMPLY365.xml")

这会导致:

OSError: Error reading file 'AnyConv.com__CCSOPM Section 1_Master (1).xml': failed to load external entity "AnyConv.com__CCSOPM Section 1_Master (1).xml"

如果您有任何解决方法的想法,请随时在下面发表评论。

【问题讨论】:

  • 该错误表明您的 XML 文件存在问题。由于您尚未与我们分享这一点,因此我们无能为力。
  • 不管是什么文件,只要是XML文件就不会解析。
  • 您确定该文件存在于您认为的位置吗?您正在尝试读取当前目录中名为“AnyConv.com__CCSOPM Section 1_Master (1).xml”的文件。也许您需要提供明确的路径?如果您向我们展示您已经尝试过的诊断步骤,我们可能会提供更好的帮助。例如,创建一个示例 XML 文件,运行一个交互式 Python 会话并尝试调用etree.parse,然后向我们展示完整的脚本。
  • 谢谢!原来我在不同的文件夹中复制了同名的文件。我疯狂地到处寻找错误,结果就是这样。对于这么愚蠢的问题,我深表歉意,感谢大家的宝贵时间!

标签: python xml xml-parsing lxml


【解决方案1】:

(1) 文件名中的部分表明您已经拥有 AnyConv.com__CCSOPM Section 1_Master .xml 文件在你的电脑和你 尝试再次将该名称的文件复制到您的计算机。

另请注意,您的文件名在(1) 之前包含一个空格,这是 奇怪的。这反过来表明您的“第一个”文件的名称 (没有(1)以空格结尾(这非常奇怪)。

验证您的文件是否确实存在。 或者可能将其名称更改为AnyConv.com__CCSOPM Section 1_Master.xml,即:

  • 没有尾随空格,
  • 最后没有(1)。 然后在您的代码中相应地更改文件名。

还要注意,您的文件名包含 下划线,这也是一种奇怪的做法。 验证您文件名中的这个下划线是否实际上是双倍的。

在您的计算机中保存许多同名文件(带有“数字 后缀”)也是一种不好的做法。 然而,更糟糕的做法是在代码中引用此类“重复”文件。 将文件名更改为没有此类“数字后缀”的文件名(在此 case (1)) 并将代码中的文件名设置为相同。

还有一个提示:无论您的文件有什么名称:

  • 文件资源管理器窗口中单击它(一次),
  • F2键,你打开这个文件名的版本,但是到目前为止 标记的文本不包括文件扩展名(在这种情况下 ".xml"),
  • Ctrl-A 将文本标记扩展到整个名称 (带有扩展名)。
  • Ctrl-C 将文件名复制到剪贴板,
  • Esc 关闭文件名编辑,
  • 打开您的代码编辑器,将光标放在您的文件名所在的位置,然后 标记整个文件名,
  • Ctrl-V 将其替换为剪贴板内容。

现在在您的代码中,您将拥有实际的文件名。

还要检查包含此文件的目录是否在列表中 尝试打开文件时 Python 扫描的目录数。

【讨论】:

    猜你喜欢
    • 2019-08-06
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多