Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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使用lxml解析XML,提供正确的解析器参数_Python_Xml_Parsing_Xpath_Lxml - Fatal编程技术网

python使用lxml解析XML,提供正确的解析器参数

python使用lxml解析XML,提供正确的解析器参数,python,xml,parsing,xpath,lxml,Python,Xml,Parsing,Xpath,Lxml,我正在用python中的lxml解析xml数据 数据如下所示: string='''<?xml version="1.0" encoding="UTF-8"?>/n <div type="request" xml:base="/k-api/7728" xml:lang="en" > <div n="" type="requ

我正在用python中的lxml解析xml数据

数据如下所示:

string='''<?xml version="1.0" encoding="UTF-8"?>/n
    <div type="request" xml:base="/k-api/7728" xml:lang="en" >
    <div n="" type="request" xml:id="_54f59d0003">
        <p xml:id="_54f59d0004"/>
        <p xml:id="_54f59d0005">Requests </p>
    </div>
    <div n="0001" type="request" xml:id="_54f59d0006">
        <p xml:id="_54f59d0007">1.  First request.
        </p>
    </div>
    <div n="0002" type="claim" xml:id="_54f59d0008">
         <p xml:id="_54f59d0009">2. Second request.
         </p>
    </div>
    <div n="0003" type="request" xml:id="_54f59d0010">
         <p xml:id="_54f59d0011">3. Thrid requests.
         </p>
    </div>
    <div n="0004" type="request" xml:id="_54f59d0012">
        <p xml:id="_54f59d0013">4. request.
        </p>
    </div>
</div>'''


import xml.etree.ElementTree as ET
from lxml import etree
parser = etree.XMLParser(encoding="UTF-8", resolve_entities=False, strip_cdata=False, recover=True, ns_clean=True)
XML_tree = etree.fromstring(xml_string,parser=parser)
但是我想知道是否有一种方法可以告诉解析器lxml不应该处理换行 b) Utf-8字符串中的第一行。我也可以通过以下方式处理:

xml_string = xml_string.replace('<?xml version="1.0" encoding="UTF-8"?>','')
xml\u string=xml\u string.replace(“”,“”)
在解析之前,但是否有一种方法可以在lxml解析器内完成所有操作?即告诉解析器删除换行符并忘记编码(注意:encoding=“UTF-8”或encoding=None不能解决问题)

谢谢

编辑1:不删除编码位时得到的错误为: ValueError:不支持带有编码声明的Unicode字符串。请使用字节输入或不带声明的XML片段。

etree.fromstring()函数应将XML字符串输入编码为字节,以便在XML片段包含XML声明时正确解析

或者,可以使用
ElementTree.fromstring()
函数

将xml.etree.ElementTree作为ET导入
从lxml导入etree
xml_字符串=“”
'''
parser=etree.XMLParser(encoding=“UTF-8”,resolve\u entities=False,strip\u cdata=False,recover=True,ns\u clean=True)
#选择1
root=etree.fromstring(xml_string.encode('utf-8'),解析器)
#选择2
root=ET.fromstring(xml_字符串,解析器)
#对解析后的XML执行一些操作
pretty\u xml=etree.tostring(root,pretty\u print=True,encoding=str)
打印(漂亮的xml)

您的代码对我来说很好,在
string
XML\u tree=etree.fromstring(string.encode('utf-8'),parser=parser)周围使用了三个引号
看看编码。
xml_string = xml_string.replace('<?xml version="1.0" encoding="UTF-8"?>','')