如何一起显示所有 XML 标签错误?

Posted

技术标签:

【中文标题】如何一起显示所有 XML 标签错误?【英文标题】:How to display all XML tag errors together? 【发布时间】:2022-01-20 05:27:22 【问题描述】:

我正在验证 XML 文件。我需要一起显示所有标签错误,例如缺少 、\。 当我使用以下代码时,它只显示第一个错误。

try:
    tree = ET.parse(filename)   
except Exception as e:
    excep = str(e)
print(excep)

我想将所有不匹配的内容一起显示。

Sample XML: (removed some <, > , \)

<?xml version="1.0" encoding="UTF-8"?>
<note>
to>Tove</to>
<from>Jani<from>
<headingReminder</heading>
<body>Don't forget me this weekend!</body>
</note>

我生成了如下的sample.xsd

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Technologies Online Tools 1.0 (https://www.liquid-technologies.com) -->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="to" type="xs:string" />
        <xs:element name="from" type="xs:string" />
        <xs:element name="heading" type="xs:string" />
        <xs:element name="body" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我试图从 here 执行 Roger Dahl 解决方案

def validate_with_lxml(xsd_tree, xml_tree):
    schema = lxml.etree.XMLSchema(xsd_tree)
    try:
        schema.assertValid(xml_tree)
    except lxml.etree.DocumentInvalid:
        print("Validation error(s):")
        for error in schema.error_log:
            print("  Line : ".format(error.line, error.message))

validate_with_lxml("sample.xsd", "sample.xml")

我收到错误:

Traceback (most recent call last):
  File "C:/Ashok/xmlallerrors.py", line 85, in <module>
    validate_with_lxml("sample.xsd", "sample.xml")
  File "C:/Ashok/VLEX_BR_Tool/xmlallerrors.py", line 76, in validate_with_lxml
    schema = lxml.etree.XMLSchema(xsd_tree)
  File "src\lxml\xmlschema.pxi", line 53, in lxml.etree.XMLSchema.__init__
  File "src\lxml\apihelpers.pxi", line 41, in lxml.etree._documentOrRaise
TypeError: Invalid input object: str

提前致谢。

【问题讨论】:

XML 解析器将捕获第一个第一个错误,引发异常并停止。你做不到。 @balderman 是否有其他解决方案可以将所有错误一起打印? 我不知道任何解决方案。 【参考方案1】:

我不知道有任何主流 XML 解析器会在您描述的格式错误之后继续运行。

然而,IDE 工具(我只检查了 Oxygen 和 IntelliJ)似乎能够在 XML 文档中标记多个语法错误。我认为这意味着他们正在使用自己手工制作的 XML 解析器。

【讨论】:

我正在寻找一种使用 python 将所有错误一起显示的解决方案。 我知道。我告诉你,我认为你不会成功。 @AshokAnumula:通常,格式正确的错误类似于意外驶离道路:护栏突破是显而易见的并且有用的报告,但是当汽车从悬崖上掉下来时遇到的任何进一步问题都是很难以有用的方式检测和报告。 我们可以使用python和xsd来实现吗? 首先,请不要以使之前的答案无效的方式编辑问题,这会使任何人都很难弄清楚发生了什么。其次,向格式错误的文件添加模式是无关紧要的。该文件必须是格式正确的 XML,然后才能针对架构进行验证。

以上是关于如何一起显示所有 XML 标签错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何一次性打开所有关闭的 XML 标签?

如何根据标签的属性名称选择两个标签之间的 xml 文件中的所有节点?

如何从 XML 文件中提取所有标签及其子项?

如何使用 php 获取 XML 中所有现有标签的列表

xml的学习

如何从字符串中删除所有html标签[重复]