Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XMLParser在解析XML架构文件时跳过属性_Python_Xsd_Lxml - Fatal编程技术网

Python XMLParser在解析XML架构文件时跳过属性

Python XMLParser在解析XML架构文件时跳过属性,python,xsd,lxml,Python,Xsd,Lxml,我需要读取XML模式文件并仅提取这些元素,这些元素具有字段minOccurs=“0”。但我面临的问题是,当XML解析器在解析文档时跳过该字段 就像我在下面的代码中展示的一样 我有一个示例XML文件: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xsd:include schemaLocatio

我需要读取XML模式文件并仅提取这些元素,这些元素具有字段
minOccurs=“0”
。但我面临的问题是,当XML解析器在解析文档时跳过该字段

就像我在下面的代码中展示的一样

我有一个示例XML文件:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
    <xsd:include schemaLocation="def.xml"/>
    <xsd:element name="MainElementName">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="A">
                    <xsd:complexType>
                        <xsd:attribute name="AA" required="False" type="string"/>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="B" minOccurs="0" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:attribute name="BA" type="string"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
我得到了输出:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
    <xsd:include schemaLocation="def.xml"/>
    <xsd:element name="MainElementName">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="A">
                    <xsd:complexType>
                        <xsd:attribute name="AA" type="string"/>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="B">
                    <xsd:complexType>
                        <xsd:attribute name="BA" type="string"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>


我不知道为什么解析器会跳过属性中的
required
字段和元素中的
min/maxOccurs
。有人知道如何解决这个问题吗

您的代码不正确,我无法编译。例如,
ElementTree.tostring()
接受一个
元素
实例,但您正在传递一个
ElementTree
实例(
tree

此代码适用于我:

将xml.etree.ElementTree作为et导入
parser=et.XMLParser()
tree=et.parse('/path/to.xml',解析器)
tmp_text=et.tostring(tree.getroot(),encoding='unicode')
打印(tmp_文本)
对于Python 3.6.8,输出为:



OP很可能使用lxml,它接受
ElementTree
实例作为
tostring()
的参数。是的,我使用的是lxml。。。这就是错误所在。非常感谢你到底是什么错了?这个答案并没有解释为什么“解析器跳过属性中的必填字段,而min/maxOccurs出现在元素中”。