2017-06-16 4 views
0

Ich habe ein Problem. Ich konnte den Wert nicht mit Django und Python abrufen und anzeigen. Ich erkläre meinen Code unten.Kann nicht den richtigen Wert mit Django und Python

def viewbook(request): 
     doc = minidom.parse("roomlist.xml") 
     staffs = doc.getElementsByTagName("location") 
     root = [] 
     for staff in staffs: 
      lname=staff.getAttribute("name"); 
      roomname=staff.getElementsByTagName("roomname")[0] 
      seat=staff.getElementsByTagName("noseats")[0] 
      project=staff.getElementsByTagName("projectorscreen")[0] 
      video=staff.getElementsByTagName("videoconf")[0] 
      root.append({'lname':lname,'roomname':roomname,'seat':seat,'project':project,'video':video}) 
return render(request,'booking/viewbook.html',{'people': root}) 

Hier bin ich Abrufen der Daten von meinem .xml Blatt und das Blatt ist unten angegeben.

<?xml version="1.0" ?><roomlist> 
    <location name="Bangalore"> 
    <room id="1uy92j908u092"> 
     <roomname> Aquarius </roomname> 
     <noseats> 10 </noseats> 
     <projectorscreen>yes</projectorscreen> 
     <videoconf>yes</videoconf> 
    </room> 
    </location> 
<location name="Bhubaneswar"><room id="131198912460"><roomname>cottage</roomname><noseats>5</noseats><projectorscreen>Yes</projectorscreen><videoconf>Yes</videoconf></room></location></roomlist> 

Hier Ich versuche, die Werte in tabellarischer Form und der Code gegeben wird unten angezeigt werden soll.

<tr> 
      <th>Location Name</th> 
      <th>Room Name</th> 
      <th>seats</th> 
      <th>Projector screen</th> 
      <th>Video Conference</th> 
     </tr> 
    {% for person in people %} 
     <tr> 
      <td>{{person.lname}}</td> 
      <td>{{person.roomname}}</td> 
      <td>{{person.seat}}</td> 
      <td>{{person.project}}</td> 
      <td>{{person.video}}</td> 
     </tr> 

Aber in meinem Fall bekomme ich die folgende Art der Ausgabe.

Location Name  Room Name seats Projector screen Video Conference 
Bangalore <DOM Element: roomname at 0x7fcc35275440> <DOM Element: noseats at 0x7fcc35275560> <DOM Element: projectorscreen at 0x7fcc35275290> <DOM Element: videoconf at 0x7fcc352757a0> 
Bhubaneswar <DOM Element: roomname at 0x7fcc35262cf8> <DOM Element: noseats at 0x7fcc374fb6c8> <DOM Element: projectorscreen at 0x7fcc36579128> <DOM Element: videoconf at 0x7fcc352756c8> 

Hier muss ich alle richtigen Wert aus dem XML-Blatt erhalten. Bitte helfen Sie mir, dieses Problem zu lösen.

+0

wo ist Ihre Rücksendeaussage? – Arun

+0

Sehen Sie sich die API-Dokumentation von minidom an, um Attributwerte wie "name" und den Wert im Knoten zu extrahieren. – Rohan

+0

Kannst du es ändern? – satya

Antwort

0

Basierend auf einem Beispiel aus der Dokumentation, node.data ist die Art, wie Sie Daten von einem Knoten erhalten, der nur Text enthält.

def getText(nodelist): 
    rc = [] for node in nodelist: 
    if node.nodeType == node.TEXT_NODE:  
    rc.append(node.data) 
    return "".join(rc) 

docs

2

Sie das Element Wert von firstChild.nodeValue oder firstChild.data des xml bekommen haben, versuchen Sie dies:

def viewbook(request): 
    doc = minidom.parse("roomlist.xml") 
    staffs = doc.getElementsByTagName("location") 
    root = [] 
    for staff in staffs: 
     lname=staff.getAttribute("name"); 
     roomname=staff.getElementsByTagName("roomname")[0].firstChild.nodeValue.strip() 
     seat=staff.getElementsByTagName("noseats")[0].firstChild.nodeValue.strip() 
     project=staff.getElementsByTagName("projectorscreen")[0].firstChild.nodeValue.strip() 
     video=staff.getElementsByTagName("videoconf")[0].firstChild.nodeValue.strip() 
+0

Danke. Es funktioniert. – satya

+0

@satya Cool, froh, es funktioniert, besser 'strip()' es nach dem Wert zu bekommen. –

0

Sie

from xml.dom.minidom import parse 
doc = parse("dd.xml") 
staffs = doc.getElementsByTagName("location") 
root = [] 
for staff in staffs: 
    lname=staff.getAttribute("name"); 
    roomname=staff.getElementsByTagName("roomname")[0].firstChild.wholeText 
    seat=staff.getElementsByTagName("noseats")[0].firstChild.wholeText 
    project=staff.getElementsByTagName("projectorscreen")[0].firstChild.wholeText 
    video=staff.getElementsByTagName("videoconf")[0].firstChild.wholeText 
    root.append({'lname':lname,'roomname':roomname,'seat':seat,'project':project,'video':video}) 
print root 

Ausgang

bekommen
[{'lname': u'Bangalore', 'roomname': u' Aquarius ', 'video': u'yes', 'project': u'yes', 'seat': u' 10 '}, {'lname': u'Bhubaneswar', 'roomname': u'cottage', 'video': u'Yes', 'project': u'Yes', 'seat': u'5'}] 
Verwandte Themen