gpt4 book ai didi

python - 无法使用 ElementTree 修改 XML 正文中 CDATA 内的内容

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:28 24 4
gpt4 key购买 nike

我目前正在尝试在我创建的 python 脚本中将 XML 文件 POST 到 Jboss,但是当 POST 方法执行时,我遇到了与 jboss 控制台上的命名空间相关的错误。

注意:在尝试 POST 之前,我已使用 ElementTree 来解析 XML/更改 XML 正文中的某些字段。

注意:当请求在 SOAPUI 中(成功)发送时,xml 主体周围有一些肥皂头(见下文),并且我已在正在读取的 xml 文件中排除这些头,以便解析/编辑 xml根据需要。

我的目标是:

  1. 找到一种方法,在解析之前将肥皂头简单地包含在 XML 文件中(如果我当前包含它们,ElementTree 将不会编辑 XML)

或者

  • 消除了排除了肥皂头的元素上的“无命名空间”错误。
  • 脚本中发布请求的方法:

    def fire_post_request():
    xml_file = "updated.xml"
    headers = {'Content-Type':'text/xml'}

    # Open the XML file.
    with open(xml_file) as xml:
    # Give the object representing the XML file to requests.post.
    r = requests.post('http://localhost:8000/path/to/whererulesserviceisrunning', data=xml)

    print (r.content)

    Jboss 控制台出错:

     <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:VersionMismatch</faultcode><faultstring>No namespace on "SomeDefinition" element.</faultstring></soap:Fault></soap:Body></soap:Envelope>

    不包含肥皂头的 XML 当前结构 (parsedxml.xml):

     <SomeDefinition>
    <Channel>....</Channel>

    <Rulesmsg>

    <body>
    ....
    </body>
    </service>
    </Rulesmsg>
    </SomeDefinition>

    我已从 XML 文件中排除 Soap header ,因为使用它们,ElementTree 不允许我编辑 XML:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rule="somewebsitepath0" xmlns:ws="somewebsitepath1" xmlns:buss="somewebsitepath2">
    <soapenv:Header/>
    <soapenv:Body>
    <ws:Respond>
    <ws:Message>
    <buss:SourceReference>11122</buss:SourceReference>
    <buss:Content>**<![CDATA[**

    .....XML BODY WOULD GO HERE.....

    **]]>**</bus:Content>
    <bus:MessageTypeId>3243242</bus:MessageTypeId>
    </ws:Message>
    </ws:Respond>
    </soapenv:Body>
    </soapenv:Envelope>

    最佳答案

    此问题与使用 ElementTree 后 CDATA 无法保留为 CDATA 有关。我最终使用 lxml 库来根据我的要求保留 CDATA。

    关于python - 无法使用 ElementTree 修改 XML 正文中 CDATA 内的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58005457/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com