我正在解析一个大型 XML 文件以创建 2 个列表(channelName 和 channelNum),并且这些列表的创建正在运行。
接下来我要做的是根据创建的列表创建一个新的、更小的 XML 文件,并为每组通道名称和通道编号创建一个单独的子节点 ()。
从下面的代码创建的列表(此处缩写)是:
channelName = ['Channel 01', 'Channel 02', 'Channel 03', 'FOX', 'NBC', 'Channel 04']
channelNum = ['1', '2', '3', '4', '5', '6']
我尝试过的代码是:
import xml.etree.ElementTree as ET
tree = ET.parse('svd_guide.xml')
root = tree.getroot()
ChannelName = []
ChannelNum = []
for child in root.findall('channel'):
ChannelName.append(child.find('name').text)
ChannelNum.append(child.find('logicalChannel').text)
def create_xml():
channelroot = ET.Element("channels")
child = ET.SubElement(channelroot, "channel")
for name, num in zip(ChannelName, ChannelNum):
ET.SubElement(child, "name").text = name
ET.SubElement(child, "chan").text = num
guidetree = ET.ElementTree(channelroot)
guidetree.write("guide.xml", encoding = "utf-8", xml_declaration = True)
create_xml()
我得到的结果是:
<?xml version='1.0' encoding='utf-8'?\>
<channels>
<channel>
<name>Channel 01</name>
<chan>1</chan>
<name>Channel 02</name>
<chan>2</chan>
<name>Channel 03</name>
<chan>3</chan>
<name>FOX</name>
<chan>4</chan>
<name>NBC</name>
<chan>5</chan>
<name>Channel 04</name>
<chan>6</chan>
</channel>
</channels>
我希望得到的结果是:
<?xml version='1.0' encoding='utf-8'?\>
<channels>
<channel>
<name>Channel 01</name>
<chan>1</chan>
</channel>
<channel>
<name>Channel 02</name>
<chan>2</chan>
</channel>
<channel>
<name>Channel 03</name>
<chan>3</chan>
</channel>
<channel>
<name>FOX</name>
<chan>4</chan>
</channel>
<channel>
<name>NBC</name>
<chan>5</chan>
</channel>
<channel>
<name>Channel 04</name>
<chan>6</chan>
</channel>
您只需将
child = ET.SubElement(channelroot, "channel")
移动到 for 循环内部,因为您想要/需要多次创建 channel
。
我更改了其他一些部分,因为我没有
svd_guide.xml
,所以我在ChannelName
和ChannelNum
上使用了init。
import xml.etree.ElementTree as ET
#tree = ET.parse('svd_guide.xml')
#root = tree.getroot()
ChannelName = ['Channel 01', 'Channel 02', 'Channel 03', 'FOX', 'NBC', 'Channel 04']
ChannelNum = ['1', '2', '3', '4', '5', '6']
#for child in root.findall('channel'):
# ChannelName.append(child.find('name').text)
# ChannelNum.append(child.find('logicalChannel').text)
def create_xml():
channelroot = ET.Element("channels")
#child = ET.SubElement(channelroot, "channel")
for name, num in zip(ChannelName, ChannelNum):
child = ET.SubElement(channelroot, "channel")
ET.SubElement(child, "name").text = name
ET.SubElement(child, "chan").text = num
guidetree = ET.ElementTree(channelroot)
guidetree.write("guide.xml", encoding = "utf-8", xml_declaration = True)
create_xml()
输出(
guide.xml
):
<?xml version='1.0' encoding='utf-8'?>
<channels>
<channel/>
<channel>
<name>Channel 01</name>
<chan>1</chan>
</channel>
<channel>
<name>Channel 02</name>
<chan>2</chan>
</channel>
<channel>
<name>Channel 03</name>
<chan>3</chan>
</channel>
<channel>
<name>FOX</name>
<chan>4</chan>
</channel>
<channel>
<name>NBC</name>
<chan>5</chan>
</channel>
<channel>
<name>Channel 04</name>
<chan>6</chan>
</channel>
</channels>