Python 2.7 使用“时xml元素文本中的Python空格”&&引用;

Python 2.7 使用“时xml元素文本中的Python空格”&&引用;,python-2.7,lxml,Python 2.7,Lxml,我有一个脚本,它可以在线提取托管的XML并将其保存在本地。然后脚本遍历本地文件并替换/添加某些文本。但是,由于某些原因,当我使用“&”符号时,在元素文本中会插入一个额外的空格。下面是我正在分析的XML元素示例: <TrackingEvents> <Tracking event="rewind"> http://www.example.com/rewind_1.png?test=rewind_test </Tracking> <Tracking even

我有一个脚本,它可以在线提取托管的XML并将其保存在本地。然后脚本遍历本地文件并替换/添加某些文本。但是,由于某些原因,当我使用“&”符号时,在元素文本中会插入一个额外的空格。下面是我正在分析的XML元素示例:

<TrackingEvents>
<Tracking event="rewind">
http://www.example.com/rewind_1.png?test=rewind_test 
</Tracking>
<Tracking event="pause">
http://www.example.com/pause_1.png?test=rewind_test 
</Tracking>
我肯定需要一些帮助。谢谢

更新:实际上,这似乎与使用“&”无关。以下是我刚刚添加不同文本时的示例:

<TrackingEvents>
<Tracking event="rewind">
http://www.example.com/rewind_1.png?test=rewind_test test123
</Tracking>
<Tracking event="pause">
http://www.example.com/pause_1.png?test=rewind_test test123
</Tracking>
</TrackingEvents>

http://www.example.com/rewind_1.png?test=rewind_test 测试123
http://www.example.com/pause_1.png?test=rewind_test 测试123

在向
元素添加任何内容之前,空白就已经存在于原始XML中了;它是
.text
中最后一个字母与结束标记之间的换行符。因此,您应该在追加文本之前删除空白,而不是像在上面的代码中那样在追加文本之后删除空白:

....
if "?" in element.text:
    element.text = element.text.strip() + "&cb={CACHEBUSTER}"
else:
    element.text = element.text.strip() + "?cb={CACHEBUSTER}"
....

是的,我相信你是对的,新线一直在那里。。。将“\n”条带化可修复此问题。谢谢
for URL, xml_name, original_server in tqdm(XML_tags):
    response = requests.get(URL)
    with open(xml_name, 'wb') as file:
        file.write(response.content)
    with open(xml_name) as saved_file:
    tree = ET.parse(saved_file)
    root = tree.getroot()

    for element in root.iter(tag=ET.Element):
    if element.text != None:
        if ".png" in element.text:
            if "?" in element.text:
                element.text = element.text + "&cb={CACHEBUSTER}"
                element.text = element.text.strip()
            else:
                element.text = element.text + "?cb={CACHEBUSTER}"
                element.text = element.text.strip()
        else:
            pass

    server = "example.server: ../sample/sample/" + original_server
    tree.write(xml_name, xml_declaration=True, method='xml', 
    encoding='utf8')
    server_upload = subprocess.Popen(["scp", xml_name, server])
    upload_wait = os.waitpid(server_upload.pid, 0)
<TrackingEvents>
<Tracking event="rewind">
http://www.example.com/rewind_1.png?test=rewind_test test123
</Tracking>
<Tracking event="pause">
http://www.example.com/pause_1.png?test=rewind_test test123
</Tracking>
</TrackingEvents>
....
if "?" in element.text:
    element.text = element.text.strip() + "&cb={CACHEBUSTER}"
else:
    element.text = element.text.strip() + "?cb={CACHEBUSTER}"
....