将库元素添加到现有XML文件中
XML文件是:
<?xml version="1.0"?>
<sdk:sdk-addon
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdk="http://schemas.android.com/sdk/android/addon/7">
<sdk:add-on>
<sdk:vendor-id>vendor1</sdk:vendor-id>
<sdk:vendor-display>vendor1</sdk:vendor-display>
<sdk:name-id>vendor1_apis</sdk:name-id>
<sdk:name-display>vendor1 Z2 SDK Add-On</sdk:name-display>
<sdk:description>SDK Add-On for the Z2 Platform</sdk:description>
<sdk:api-level>30</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:libs>
</sdk:libs>
<sdk:archives>
<sdk:archive>
<sdk:size>84287</sdk:size>
<sdk:checksum type='sha1'>7825e75aa697841fe0fe5b9438ca44792c1786d0</sdk:checksum>
<sdk:url>z2_sdk_addon-eng.jenkins-linux-x86.zip</sdk:url>
<sdk:host-os>linux</sdk:host-os>
</sdk:archive>
</sdk:archives>
</sdk:add-on>
</sdk:sdk-addon>
库文件是:
library1
library2
输出应该是:
<?xml version="1.0"?>
<sdk:sdk-addon
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdk="http://schemas.android.com/sdk/android/addon/7">
<sdk:add-on>
<sdk:vendor-id>vendor1</sdk:vendor-id>
<sdk:vendor-display>vendor1</sdk:vendor-display>
<sdk:name-id>vendor1_apis</sdk:name-id>
<sdk:name-display>vendor1 Z2 SDK Add-On</sdk:name-display>
<sdk:description>SDK Add-On for the Z2 Platform</sdk:description>
<sdk:api-level>30</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:libs>
<sdk:lib>
<sdk:name>libray1</sdk:name>
</sdk:lib>
<sdk:lib>
<sdk:name>libray2</sdk:name>
</sdk:lib>
</sdk:libs>
<sdk:archives>
<sdk:archive>
<sdk:size>84287</sdk:size>
<sdk:checksum type='sha1'>7825e75aa697841fe0fe5b9438ca44792c1786d0</sdk:checksum>
<sdk:url>z2_sdk_addon-eng.jenkins-linux-x86.zip</sdk:url>
<sdk:host-os>linux</sdk:host-os>
</sdk:archive>
</sdk:archives>
</sdk:add-on>
</sdk:sdk-addon>
我创建了一个shell脚本,该脚本创建文本
<sdk:lib>
<sdk:name>libray1</sdk:name>
</sdk:lib>
<sdk:lib>
<sdk:name>libray2</sdk:name>
</sdk:lib>
,并尝试使用Python代码直接添加结果文本。
from lxml import etree
root = etree.parse('my.xml').getroot()
#print(root)
#print(etree.tostring(root))
libraries = root.find(".//{http://schemas.android.com/sdk/android/addon/7}libs")
print(libraries)
with open('libraries_to_be_added_xml') as libraries_to_be_added_file:
text=libraries_to_be_added_file.read()
libraries.text=str(text)
tree = etree.ElementTree(root)
tree.write("my.xml", encoding="UTF-8", xml_declaration=True, standalone=True)
我获得的输出具有&amp; gt; sdk:lib&amp; lt;
而不是&lt; sdk:lib&gt;
输出我正在获取
<?xml version="1.0"?>
<sdk:sdk-addon
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdk="http://schemas.android.com/sdk/android/addon/7">
<sdk:add-on>
<sdk:vendor-id>vendor1</sdk:vendor-id>
<sdk:vendor-display>vendor1</sdk:vendor-display>
<sdk:name-id>vendor1_apis</sdk:name-id>
<sdk:name-display>vendor1 Z2 SDK Add-On</sdk:name-display>
<sdk:description>SDK Add-On for the Z2 Platform</sdk:description>
<sdk:api-level>30</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:libs>
>sdk:lib<
>sdk:name<libray1>/sdk:name<
>/sdk:lib<
>sdk:lib<
>sdk:name<libray2>/sdk:name<
>/sdk:lib<
</sdk:libs>
<sdk:archives>
<sdk:archive>
<sdk:size>84287</sdk:size>
<sdk:checksum type='sha1'>7825e75aa697841fe0fe5b9438ca44792c1786d0</sdk:checksum>
<sdk:url>z2_sdk_addon-eng.jenkins-linux-x86.zip</sdk:url>
<sdk:host-os>linux</sdk:host-os>
</sdk:archive>
</sdk:archives>
</sdk:add-on>
</sdk:sdk-addon>
Xml file is:
<?xml version="1.0"?>
<sdk:sdk-addon
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdk="http://schemas.android.com/sdk/android/addon/7">
<sdk:add-on>
<sdk:vendor-id>vendor1</sdk:vendor-id>
<sdk:vendor-display>vendor1</sdk:vendor-display>
<sdk:name-id>vendor1_apis</sdk:name-id>
<sdk:name-display>vendor1 Z2 SDK Add-On</sdk:name-display>
<sdk:description>SDK Add-On for the Z2 Platform</sdk:description>
<sdk:api-level>30</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:libs>
</sdk:libs>
<sdk:archives>
<sdk:archive>
<sdk:size>84287</sdk:size>
<sdk:checksum type='sha1'>7825e75aa697841fe0fe5b9438ca44792c1786d0</sdk:checksum>
<sdk:url>z2_sdk_addon-eng.jenkins-linux-x86.zip</sdk:url>
<sdk:host-os>linux</sdk:host-os>
</sdk:archive>
</sdk:archives>
</sdk:add-on>
</sdk:sdk-addon>
Libraries file is:
library1
library2
Output should be:
<?xml version="1.0"?>
<sdk:sdk-addon
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdk="http://schemas.android.com/sdk/android/addon/7">
<sdk:add-on>
<sdk:vendor-id>vendor1</sdk:vendor-id>
<sdk:vendor-display>vendor1</sdk:vendor-display>
<sdk:name-id>vendor1_apis</sdk:name-id>
<sdk:name-display>vendor1 Z2 SDK Add-On</sdk:name-display>
<sdk:description>SDK Add-On for the Z2 Platform</sdk:description>
<sdk:api-level>30</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:libs>
<sdk:lib>
<sdk:name>libray1</sdk:name>
</sdk:lib>
<sdk:lib>
<sdk:name>libray2</sdk:name>
</sdk:lib>
</sdk:libs>
<sdk:archives>
<sdk:archive>
<sdk:size>84287</sdk:size>
<sdk:checksum type='sha1'>7825e75aa697841fe0fe5b9438ca44792c1786d0</sdk:checksum>
<sdk:url>z2_sdk_addon-eng.jenkins-linux-x86.zip</sdk:url>
<sdk:host-os>linux</sdk:host-os>
</sdk:archive>
</sdk:archives>
</sdk:add-on>
</sdk:sdk-addon>
I created a shell script that creates a text
<sdk:lib>
<sdk:name>libray1</sdk:name>
</sdk:lib>
<sdk:lib>
<sdk:name>libray2</sdk:name>
</sdk:lib>
And tried directly adding the result text using python code
from lxml import etree
root = etree.parse('my.xml').getroot()
#print(root)
#print(etree.tostring(root))
libraries = root.find(".//{http://schemas.android.com/sdk/android/addon/7}libs")
print(libraries)
with open('libraries_to_be_added_xml') as libraries_to_be_added_file:
text=libraries_to_be_added_file.read()
libraries.text=str(text)
tree = etree.ElementTree(root)
tree.write("my.xml", encoding="UTF-8", xml_declaration=True, standalone=True)
The output I am getting has >sdk:lib<
instead of <sdk:lib>
Output I am getting
<?xml version="1.0"?>
<sdk:sdk-addon
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdk="http://schemas.android.com/sdk/android/addon/7">
<sdk:add-on>
<sdk:vendor-id>vendor1</sdk:vendor-id>
<sdk:vendor-display>vendor1</sdk:vendor-display>
<sdk:name-id>vendor1_apis</sdk:name-id>
<sdk:name-display>vendor1 Z2 SDK Add-On</sdk:name-display>
<sdk:description>SDK Add-On for the Z2 Platform</sdk:description>
<sdk:api-level>30</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:libs>
>sdk:lib<
>sdk:name<libray1>/sdk:name<
>/sdk:lib<
>sdk:lib<
>sdk:name<libray2>/sdk:name<
>/sdk:lib<
</sdk:libs>
<sdk:archives>
<sdk:archive>
<sdk:size>84287</sdk:size>
<sdk:checksum type='sha1'>7825e75aa697841fe0fe5b9438ca44792c1786d0</sdk:checksum>
<sdk:url>z2_sdk_addon-eng.jenkins-linux-x86.zip</sdk:url>
<sdk:host-os>linux</sdk:host-os>
</sdk:archive>
</sdk:archives>
</sdk:add-on>
</sdk:sdk-addon>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您将文本添加到XML节点
&lt; sdk:libs&gt;
。这就是为什么文本被逃脱的原因,因此不会破坏XML文档。如果是elementTree:
相关文档: https://docs.python.org/3/library/xml.etree.elementtree.html
You are adding text to the xml node
<sdk:libs>
. Thats why the text gets escaped, so it does not break the xml document.You need to work with xml elements, in the case of ElementTree:
Relevant documentation: https://docs.python.org/3/library/xml.etree.elementtree.html