在 Python IO 错误中解析 XML

Mar*_*kus -1 python xml

我知道这个问题已经在堆栈上被多次询问(和回答)。我已经尝试了很多,但由于某种原因我无法克服这个错误:

Traceback (most recent call last):
  File "J:\eclipse\workspace_python\TF2_Monitor\src\TF2_Monitor.py", line 23, in <module>
    xmldoc = minidom.parse(sampleXML)
  File "C:\Python27\lib\xml\dom\minidom.py", line 1920, in parse
    return expatbuilder.parse(file)
  File "C:\Python27\lib\xml\dom\expatbuilder.py", line 922, in parse
    fp = open(file, 'rb')
IOError: [Errno 2] No such file or directory: '<?xml version = "1.0" encoding = "utf-8"?>\n<Patients>\n    <Patient>\n               <PatientCharacteristics>\n                   <patientCode>3</patientCode>\n               </PatientCharacteristics>\n    </Patient>\n</Patients>'
Run Code Online (Sandbox Code Playgroud)

这是导致问题的代码位:-

if __name__ == '__main__':
   from xml.dom import minidom

   sampleXML = """<?xml version = "1.0" encoding = "utf-8"?>
   <Patients>
      <Patient>
           <PatientCharacteristics>
               <patientCode>3</patientCode>
           </PatientCharacteristics>
      </Patient>
   </Patients>"""


   xmldoc = minidom.parse(sampleXML)
Run Code Online (Sandbox Code Playgroud)

从以前的答案“没有这样的文件目录”意味着它找不到xml,但是当我在代码中将它声明为变量时,情况仍然如此吗?我猜这很简单,但就是无法发现它。

Mar*_*ers 5

minidom.parse()接受文件名(或文件对象而不是字符串),而不是要解析的 XML。使用xml.minidom.parseString()来代替:

xmldoc = minidom.parseString(sampleXML)
Run Code Online (Sandbox Code Playgroud)

请注意,除非你已经熟悉XML DOM标准,你可能希望使用的xml.minidom包装; 正如文档所述:

尚未精通 DOM 的用户应考虑使用该xml.etree.ElementTree模块进行 XML 处理。

由于其跨语言性质,DOM 非常冗长,并且没有利用 Python 的优势。如果可以,请改用 ElementTree API;要么使用标准库xml.etree.ElementTree模块,要么使用(更快更全面的)外部lxml