在 Python 中使用 minidom 解析 XML
Parsing XML using minidom in Python
我是 Python 的新手,需要专家对我的一个项目提出一点建议。
我有一个 xml 文件需要解析然后排序。
下面是 xml 文件
的示例
<Product_Key Name="Visio Professional 2002" KeyRetrievalNote="">
<Key ID=“XXX” Type="Static Activation Key">12345-67890</Key>
</Product_Key>
<Product_Key Name="Visio Professional 2008" KeyRetrievalNote="">
<Key ID=“XXX” Type="Static Activation Key">23456-78901</Key>
</Product_Key>
<Product_Key Name="Visio Professional 2012" KeyRetrievalNote="">
<Key ID=“XXX” Type="Static Activation Key">34567-89012</Key>
</Product_Key>
<Product_Key Name="Visio Professional 2016” KeyRetrievalNote="">
<Key ID=“XXX” Type="Static Activation Key">45678-90123</Key>
</Product_Key>
下面是我试图实现的输出
Visio Professional 2002: 12345-67890
Visio Professional 2008: 23456-78901
Visio Professional 2012: 34567-89012
Visio Professional 2016: 45678-90123
我正在尝试获取产品名称及其前面相应的产品密钥。
我可以获得如下所示的输出,但这不是我想要的。
Visio Professional 2002
Visio Professional 2008
Visio Professional 2012
Visio Professional 2016
12345-67890
23456-78901
34567-89012
45678-90123
我使用的代码片段如下。
import xml.dom.minidom
def main():
doc = xml.dom.minidom.parse("keysexport.xml")
names = doc.getElementsByTagName("Product_Key")
keys = doc.getElementsByTagName("Key")
for name in names:
print(name.getAttribute("Name"))
for key in keys:
print(key.firstChild.nodeValue)
if __name__ == "__main__":
main();
你自己完成了大部分工作。恭喜。
有很多方法可以实现你的最终目标,其中之一是: 既然你得到了 names
和 keys
列表,你可以将它们组合起来构造一个字典,并且然后遍历字典以获得您正在寻找的合适输出。
因此您的程序可能如下所示:
import xml.dom.minidom
def main():
doc = xml.dom.minidom.parse("keysexport.xml")
names = doc.getElementsByTagName("Product_Key")
keys = doc.getElementsByTagName("Key")
#Use the previous lists to create a dictionary
products = dict(zip(names, keys))
#Loop over the dictionary of products and display the couple key: value
for product_key, product_value in products.items():
print('{}: {}'.format(product_key.getAttribute('Name'), product_value.firstChild.nodeValue))
if __name__ == "__main__":
main()
演示:
>>> names = xmldoc.getElementsByTagName("Product_Key")
>>> keys = xmldoc.getElementsByTagName("Key")
>>> products = dict(zip(names, keys))
>>> for product_key, product_value in products.items():
... print('{}: {}'.format(product_key.getAttribute('Name'), product_value.firstChild.nodeValue))
...
Visio Professional 2002: 12345-67890
Visio Professional 2008: 23456-78901
Visio Professional 2012: 34567-89012
Visio Professional 2016: 45678-90123
我是 Python 的新手,需要专家对我的一个项目提出一点建议。
我有一个 xml 文件需要解析然后排序。 下面是 xml 文件
的示例<Product_Key Name="Visio Professional 2002" KeyRetrievalNote="">
<Key ID=“XXX” Type="Static Activation Key">12345-67890</Key>
</Product_Key>
<Product_Key Name="Visio Professional 2008" KeyRetrievalNote="">
<Key ID=“XXX” Type="Static Activation Key">23456-78901</Key>
</Product_Key>
<Product_Key Name="Visio Professional 2012" KeyRetrievalNote="">
<Key ID=“XXX” Type="Static Activation Key">34567-89012</Key>
</Product_Key>
<Product_Key Name="Visio Professional 2016” KeyRetrievalNote="">
<Key ID=“XXX” Type="Static Activation Key">45678-90123</Key>
</Product_Key>
下面是我试图实现的输出
Visio Professional 2002: 12345-67890
Visio Professional 2008: 23456-78901
Visio Professional 2012: 34567-89012
Visio Professional 2016: 45678-90123
我正在尝试获取产品名称及其前面相应的产品密钥。
我可以获得如下所示的输出,但这不是我想要的。
Visio Professional 2002
Visio Professional 2008
Visio Professional 2012
Visio Professional 2016
12345-67890
23456-78901
34567-89012
45678-90123
我使用的代码片段如下。
import xml.dom.minidom
def main():
doc = xml.dom.minidom.parse("keysexport.xml")
names = doc.getElementsByTagName("Product_Key")
keys = doc.getElementsByTagName("Key")
for name in names:
print(name.getAttribute("Name"))
for key in keys:
print(key.firstChild.nodeValue)
if __name__ == "__main__":
main();
你自己完成了大部分工作。恭喜。
有很多方法可以实现你的最终目标,其中之一是: 既然你得到了 names
和 keys
列表,你可以将它们组合起来构造一个字典,并且然后遍历字典以获得您正在寻找的合适输出。
因此您的程序可能如下所示:
import xml.dom.minidom
def main():
doc = xml.dom.minidom.parse("keysexport.xml")
names = doc.getElementsByTagName("Product_Key")
keys = doc.getElementsByTagName("Key")
#Use the previous lists to create a dictionary
products = dict(zip(names, keys))
#Loop over the dictionary of products and display the couple key: value
for product_key, product_value in products.items():
print('{}: {}'.format(product_key.getAttribute('Name'), product_value.firstChild.nodeValue))
if __name__ == "__main__":
main()
演示:
>>> names = xmldoc.getElementsByTagName("Product_Key")
>>> keys = xmldoc.getElementsByTagName("Key")
>>> products = dict(zip(names, keys))
>>> for product_key, product_value in products.items():
... print('{}: {}'.format(product_key.getAttribute('Name'), product_value.firstChild.nodeValue))
...
Visio Professional 2002: 12345-67890
Visio Professional 2008: 23456-78901
Visio Professional 2012: 34567-89012
Visio Professional 2016: 45678-90123