首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将库元素添加到现有的xml文件中

将库元素添加到现有的xml文件中
EN

Stack Overflow用户
提问于 2022-07-08 06:28:45
回答 1查看 30关注 0票数 0

Xml文件是:

代码语言:javascript
复制
    <?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>

库文件是:

代码语言:javascript
复制
library1
library2

产出应是:

代码语言:javascript
复制
    <?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脚本来创建文本

代码语言:javascript
复制
 <sdk:lib>
   <sdk:name>libray1</sdk:name>
  </sdk:lib>
      <sdk:lib>
   <sdk:name>libray2</sdk:name>
  </sdk:lib>

并尝试使用python代码直接添加结果文本。

代码语言:javascript
复制
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)

我得到的输出有&gt;sdk:lib&lt;而不是<sdk:lib>

我得到的输出

代码语言:javascript
复制
    <?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>
          &gt;sdk:lib&lt;
           &gt;sdk:name&lt;libray1&gt;/sdk:name&lt;
          &gt;/sdk:lib&lt;
              &gt;sdk:lib&lt;
           &gt;sdk:name&lt;libray2&gt;/sdk:name&lt;
          &gt;/sdk:lib&lt;
        </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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-08 06:50:12

您正在向xml节点<sdk:libs>添加文本。这就是为什么文本会被转义,所以它不会破坏xml文档。

在ElementTree的情况下,您需要使用xml元素:

代码语言:javascript
复制
# Create a lib element with a subelement
sdk_lib = ET.Element('{http://schemas.android.com/sdk/android/addon/7}lib')
sdk_name = ET.SubElement(sdk_lib, '{http://schemas.android.com/sdk/android/addon/7}name')
sdk_name.text = 'Library 1'

# Adds the sdk_lib element to your <sdk:libs> element
libraries.append(sdk_lib)

相关文件:https://docs.python.org/3/library/xml.etree.elementtree.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72907471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档