当前位置: 首页 > 知识库问答 >
问题:

在XML python中的每个元素之后添加\n

华欣荣
2023-03-14

我正在实现一个自动化,它接受一个现有的XML文件,更改其中一个值并覆盖该文件。

我的主要问题是,保持原始文件的格式对我来说很重要,但我无法做到这一点,新数据没有换行符,而且它只是一条长线。

<StationConfig StationId="8706" SportType="null" StationType="null" UseMetricSystem="US" LocalTempStorageDrive="C:\" LocalStorageDrive="C:\">
<ClubManagementEnable ClubManagementStaticHours="">false</ClubManagementEnable>
</StationConfig>

我的代码是:

parser = etree.XMLParser()
    read = etree.parse("C:\StationConfig.xml", parser=parser).getroot()
    read.set("StationId", "8706")
    tree = etree.ElementTree(read)
    tree.write("C:\devtree\Station.xml", pretty_print=True)

如何在每个元素后添加\n?谢谢

共有1个答案

董高朗
2023-03-14

据我所知,以下是你正在寻找的。

import xml.etree.ElementTree as ET

xml = '''<?xml version="1.0" encoding="UTF-8"?>
<StationConfig StationId="8706" SportType="null" StationType="null" UseMetricSystem="US" LocalTempStorageDrive="C:\" LocalStorageDrive="C:\">
   <ClubManagementEnable ClubManagementStaticHours="">false</ClubManagementEnable>
</StationConfig>'''


def _pretty_print(current, parent=None, index=-1, depth=0):
    for i, node in enumerate(current):
        _pretty_print(node, current, i, depth + 1)
    if parent is not None:
        if index == 0:
            parent.text = '\n' + ('\t' * depth)
        else:
            parent[index - 1].tail = '\n' + ('\t' * depth)
        if index == len(parent) - 1:
            current.tail = '\n' + ('\t' * (depth - 1))


root = ET.fromstring(xml)
# change something in the xml
root.attrib['StationId'] = '123'
# save it back to disk
_pretty_print(root)
tree = ET.ElementTree(root)
tree.write("out.xml")

out.xml下面

<StationConfig StationId="123" SportType="null" StationType="null" UseMetricSystem="US" LocalTempStorageDrive="C:" LocalStorageDrive="C:">
    <ClubManagementEnable ClubManagementStaticHours="">false</ClubManagementEnable>
</StationConfig>
 类似资料:
  • 我有收藏 我反复阅读并这样写: 我的另一个尝试是: 不幸的是,输出是相同的。 span中的输出为: 我希望输出是: 末尾没有逗号。我怎么能做到呢? 解决方案: 注意与元素类型关联的属性的值不能包含 代码:

  • 我有一个JPanel,我在网格的内部添加了25个JPanel。我希望每个面板周围都有一个边框,以便您可以清楚地区分每个元素。填充也可以。我向电路板添加面板的方式如果我尝试添加边框,它将应用于包含元素的较大面板。 {GridLayout实验布局=new GridLayout(5,5); } 如何在每个元素周围添加边框。是否需要更改将面板添加到网格的方式?

  • 问题内容: 下面有一个for循环代码。我通过调用一个自定义显示函数发现aBook arrayList对象仅添加了最后一个类对象三次。为什么会这样呢? 这是我的LiFiAddressBook类 } 问题答案: 由于使用static关键字,每次 调用构造函数时,旧值都会被新值覆盖,并且在打印列表中的元素时,LiFiAddressBook类的对象变量将指向相同的对象。因此打印相似的对象。 需要明确的是,

  • 问题内容: 我有一个字典列表,并且想为该列表的每个元素添加一个键。我试过了: 但是update方法返回None,所以我的结果列表中没有None。 返回语法错误。 问题答案: 您无需担心要构建新的词典列表,因为对更新后的词典的引用与对旧词典的引用相同:

  • 问题内容: 假设我有一个这样的Python清单: 我想在每个第n个元素后插入一个“ x”,比方说该列表中的三个字符。结果应为: 我知道我可以通过循环和插入来做到这一点。我实际上正在寻找的是Pythonish方式,也许是单线? 问题答案: 我有两个一线客轮。 鉴于: 使用获得指数,增加每3次字母, 如 :,然后连接成字符串和它。 [‘a’, ‘b’, ‘c’, ‘x’, ‘d’, ‘e’, ‘f’,

  • 在我的应用程序中,我希望使用此库来显示项。 服务器中的ArrayList: