解析XML文件时如何解决“文件名太长”?

时间:2020-06-10 16:25:29

标签: python xml elementtree

我知道这个问题已经被问过多次了。我花了几个小时寻找不同的答案,但没有一个对我有用。 我正在从soap调用中检索xml输出。我需要能够解析它并获取重要的元素。 但是,无论我尝试什么,我都会不断收到“文件名太长”错误。

截至目前,我的代码位于:


import requests
import requests
import xml.etree.ElementTree as ET
from bs4 import BeautifulSoup
from lxml import html
def sendRequest():
    url= " ?? "
    headers= {
    "SOAPAction": "??",
    "Content-Type": "text/plain; charset=utf-8",
    }
    body="""<?xml version=\"1.0\" encoding=\"utf-8\"?>
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" 
xmlns:urn=\"###\" xmlns:v1=\"###\" xmlns:v11=\"###\" xmlns:v12=\"http://###\">
    <soapenv:Header>
        <urn:MessageHeader version=\"1.0\">
            <MessageID>test</MessageID>
            <CreateDateTime>2013-07-05T10:56:19.701+05:30</CreateDateTime>
            <From app=\"test\" module=\"test\" nodeID=\"test\" systemCode=\"test\"/>
        </urn:MessageHeader>
    </soapenv:Header>
    <soapenv:Body>
        <v1:SearchInput>
            <v11:Style>
                <v11:StyleAttributes StyleIdentifier=\"NUM\"/>
            </v11:Style>
            <v11:AdvanceFilter WantChildren=\"1\" WantRelationship=\"1\"/>
            <v11:ExtendedFilterInput WantCP=\"1\"/>
        </v1:SearchInput>
    </soapenv:Body>
</soapenv:Envelope>
"""

    ###  = information masked

    response = requests.post(url, data=body, headers=headers)
    data = response.text
    with open('output.xml', 'w') as f:
        f.write(data)
    tree = ET.parse(data)
    root = tree.getroot()
    print(root)

send_request()

我尝试了BeautifulSoup,lxml,首先将xml保存到文件中,然后直接从调用中读取它。我使用了ET.parse()以及ET.fromstring()。尝试使用响应本身以及响应的内容。我在其他地方看到的所有答案。我确定其中一种组合可以使用,但我只是没有弄清楚哪一种组合;) 我真的不知道如何解决这个问题。 任何帮助表示赞赏。

错误:

Traceback (most recent call last):
  File "mdm.py", line 61, in <module>
    send_request()
  File "mdm.py", line 43, in send_request
    tree = ET.parse(data)
  File "/Users/mm/opt/anaconda3/lib/python3.7/xml/etree/ElementTree.py", line 1197, in parse
    tree.parse(source, parser)
  File "/Users/mm/opt/anaconda3/lib/python3.7/xml/etree/ElementTree.py", line 587, in parse
    source = open(source, "rb")
OSError: [Errno 63] File name too long: '<?xml version="1.0" encoding="UTF-8"?> .....

0 个答案:

没有答案