使用XML数据在Python中创建网络

使用XML数据在Python中创建网络,python,xml,Python,Xml,我这里有一个.xml文件 我想读一下用Python创建网络的属性。我只能成功地阅读属性,而我不知道如何继续。我需要使用.xml文件中的数据创建一个双向网络。我的python代码如下所示。你们谁能帮我一下吗 谢谢和问候 import sys import xml.dom.minidom as dom import string from xml.dom import minidom from xml.dom.minidom import parse import os Read_Data =

我这里有一个.xml文件

我想读一下用Python创建网络的属性。我只能成功地阅读属性,而我不知道如何继续。我需要使用.xml文件中的数据创建一个双向网络。我的python代码如下所示。你们谁能帮我一下吗

谢谢和问候

import sys
import xml.dom.minidom as dom 
import string
from xml.dom import minidom
from xml.dom.minidom import parse
import os
Read_Data = minidom.parse("germany50.xml")
nodelist = Read_Data.getElementsByTagName("node")
for node in nodelist :
    if node.hasAttribute("id"):
        Node = node.getAttribute("id")
    xCoordinates = node.getElementsByTagName('x') [0]
    yCoordinates = node.getElementsByTagName('y') [0]
    print "%s : %s %s" %(node.getAttribute("id"), xCoordinates.childNodes[0].data, yCoordinates.childNodes[0].data)

linklist = Read_Data.getElementsByTagName("link")
for link in linklist :
    if link.hasAttribute("id"):
        Link = link.getAttribute("id")
    Source = link.getElementsByTagName('source') [0]
    Destination = link.getElementsByTagName('target') [0]
    Capacity = link.getElementsByTagName('capacity') [0]
    print "%s - %s to %s: %s" %(link.getAttribute("id"), Source.childNodes[0].data, Destination.childNodes[0].data, Capacity.childNodes[0].data)
demandlist = Read_Data.getElementsByTagName("demand")
for demand in demandlist :
    if demand.hasAttribute("id"):
        Demand = demand.getAttribute("id")
    Source = demand.getElementsByTagName('source') [0]
    Destination = demand.getElementsByTagName('target') [0]
    Demand = demand.getElementsByTagName('demandValue') [0]
    print "%s needs %s" %(demand.getAttribute("id"), Demand.childNodes[0].data)

需要使用Python的OOPS概念来创建网络。代码如下所示。 nodemap是每个节点的映射,节点通过链接和需求在内部相互链接

import sys
import xml.dom.minidom as dom 
import string
from xml.dom import minidom
from xml.dom.minidom import parse
import os
Read_Data = minidom.parse("germany50.xml")
nodelist = Read_Data.getElementsByTagName("node")

class Node:
    def __init__(self,uid,x,y):
        self.uid=uid
        self.x=x
        self.y=y
        self.linklist=[]
        self.demandlist=[]

class Link:
    def __init__(self,uid,source,target,capacity):
        self.uid=uid
        self.source=source
        self.target=target
        self.capacity=capacity

class Demand:
    def __init__(self,uid,source,destination,demandValue):
        self.uid=uid
        self.source=source
        self.destination=destination
        self.demandValue=demandValue


nodemap={}

for node in nodelist :
    if node.hasAttribute("id"):
        Nodeid = node.getAttribute("id")
    xCoordinates = node.getElementsByTagName('x') [0]
    yCoordinates = node.getElementsByTagName('y') [0]
    nodemap[Nodeid]=Node(Nodeid,xCoordinates,yCoordinates)
    print "%s : %s %s" %(node.getAttribute("id"), xCoordinates.childNodes[0].data, yCoordinates.childNodes[0].data)

linklist = Read_Data.getElementsByTagName("link")
for link in linklist :
    if link.hasAttribute("id"):
        Linkid = link.getAttribute("id")
    Source = link.getElementsByTagName('source') [0]
    Destination = link.getElementsByTagName('target') [0]
    Capacity = link.getElementsByTagName('capacity') [0]
    linkobj= Link(Linkid,Source,Destination,Capacity)
    if nodemap.has_key(Source):
        nodemap[Source].linklist.append(linkobj)
    if nodemap.has_key(Destination):
        nodemap[Destination].linklist.append(linkobj)

    print "%s - %s to %s: %s" %(link.getAttribute("id"), Source.childNodes[0].data, Destination.childNodes[0].data, Capacity.childNodes[0].data)
demandlist = Read_Data.getElementsByTagName("demand")
for demand in demandlist :
    if demand.hasAttribute("id"):
        Demandid = demand.getAttribute("id")
    Source = demand.getElementsByTagName('source') [0]
    Destination = demand.getElementsByTagName('target') [0]
    Demandval = demand.getElementsByTagName('demandValue') [0]
    demandobj=Demand(Demandid,Source,Destination,Demandval)
    if nodemap.has_key(Source):
        nodemap[Source].demandlist.append(demandonj)
    if nodemap.has_key(Destination):
        nodemap[Destination].demandlist.append(demandobj)

    print "%s needs %s" %(demand.getAttribute("id"), Demandval.childNodes[0].data)




print nodemap
最好在Python中通读OOPS概念,这将使您了解如何在Python中形成网络、图形和树

希望这有帮助

for link in linklist :
    if link.hasAttribute("id"):
        Linkid = link.getAttribute("id")
    Source = link.getElementsByTagName('source') [0]
    Destination = link.getElementsByTagName('target') [0]
    Capacity = link.getElementsByTagName('capacity') [0]
    linkobj= Link(Linkid,Source,Destination,Capacity)
    if nodemap.has_key(Source):
        nodemap[Source].linklist.append(linkobj)
    if nodemap.has_key(Destination):
        nodemap[Destination].linklist.append(linkobj)

请注意,您缺少这样一种情况,即您的节点列表可能包含[a、B、C、D],而您的链接可能包含[(a、C)、(B、E)]。在这种情况下,必须先创建节点E,然后创建链接。我注意到这个案例出现在给定的xml中,上面提供了处理方法。

非常感谢我的朋友。我明天会试试,如果你不介意的话,我会再问你更多的问题。瓦鲁尼游戏。尽管如此,我还是建议大家学习一下Python面向对象的概念。嘿,这次我真的需要你的帮助。我搞不懂这件事。你能帮我解决这个问题吗?链接提供了我正在处理的文件。我有点利用了你的想法然后继续。但当我尝试生成此拓扑时,它显示“列表索引超出范围”。我目前正在处理export.py文件,我正在尝试生成源xml文件中的拓扑,然后向其添加更多属性,最后将这些内容写入另一个xml文件。很抱歉一再打扰你。请共享您正在运行的命令和您得到的错误的回溯。python export.py--output topology.xml--xml germany50.xml回溯(最后一次调用):文件“export.py”,第239行,在main(sys.argv[1:])文件“export.py,第234行,在main.addEdge中(PHY_链接(j,sourcen,destn,sid,did,cap_bdw))文件“/home/srva/Approach_Read.py”,第89行,在addEdge self.nodes[edge.SourceID].addEdge(edge)indexer中:列表索引超出范围我已经把程序搞得一团糟,因为我遇到了挫折:dbu但是当我尝试将其应用于我的问题时,我发现我没有nodemap={}。相反,我收集这些边和节点,然后在
类PHY\u网络中使用它们:def\uu init\uuu(self,nodes,edges,nametodmap):self.nodes=nodes-self.edges=edges-self.nametodmap=nametodmap
我真的不擅长编辑这个。此外,节点包含一个方法addEdge。我想保留那种方法。我很抱歉给您带来麻烦,因为我正忙着自己的事情,所以回复晚了。实际上,您应该在addEdge函数中保留一个check。类似于:if not self.nodes[edge.SourceID]:使用SourceID创建PHYNODE if not self.nodes[edge.designionid]:使用DESTINATIONID创建PYHNODE,然后使用您已经编写的代码。如果链接中有一些节点值不在Nodelist中,我们将为其创建一个新节点。希望你现在明白了。我没有时间运行你的程序,我的系统上也没有安装cplex。非常感谢你的帮助。我的档案似乎很好用。如果你想看的话,你可以看一下。我是用另一种方式写的,你的评论真的帮助了我。很高兴听到你这么说!干杯