XML File auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Hallo, wer sich mit Python und XML auskennt, für den mag diese Frage nun lächerlich vorkommen.
kann mir jemand sagen wie ich am einfachsten die Anzahl der Tags "CHANNELTYPE="DI" auslesen kann?
Also in meinem Fall wären es 4.

Danke

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="/cplcfg/EA-config.xsl" ?>
<WAGO>
 <Module ARTIKELNR="750-4xx" MODULETYPE="DI" CHANNELCOUNT="4" MAP="FB1">
  <Kanal CHANNELNAME="M001Ch1" CHANNELTYPE="DI">
<!--#READPI ADR=IX0.0&FORMAT=%d-->
  </Kanal>
  <Kanal CHANNELNAME="M001Ch2" CHANNELTYPE="DI">
<!--#READPI ADR=IX0.1&FORMAT=%d-->
  </Kanal>
  <Kanal CHANNELNAME="M001Ch3" CHANNELTYPE="DI">
<!--#READPI ADR=IX0.2&FORMAT=%d-->
  </Kanal>
  <Kanal CHANNELNAME="M001Ch4" CHANNELTYPE="DI">
<!--#READPI ADR=IX0.3&FORMAT=%d-->
  </Kanal>
 </Module>
 <Module ARTIKELNR="750-5xx" MODULETYPE="DO" CHANNELCOUNT="4" MAP="FB1">
  <Kanal CHANNELNAME="M002Ch1" CHANNELTYPE="DO">
<!--#READPI ADR=QX0.0&FORMAT=%d-->
  </Kanal>
  <Kanal CHANNELNAME="M002Ch2" CHANNELTYPE="DO">
<!--#READPI ADR=QX0.1&FORMAT=%d-->
  </Kanal>
  <Kanal CHANNELNAME="M002Ch3" CHANNELTYPE="DO">
<!--#READPI ADR=QX0.2&FORMAT=%d-->
  </Kanal>
  <Kanal CHANNELNAME="M002Ch4" CHANNELTYPE="DO">
<!--#READPI ADR=QX0.3&FORMAT=%d-->
  </Kanal>
 </Module>
</WAGO>
BlackJack

Code: Alles auswählen

In [16]: from lxml import etree

In [17]: doc = etree.parse('test.xml')

In [18]: doc.xpath('count(.//Kanal[@CHANNELTYPE="DI"])')
Out[18]: 4.0
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Perfekt, nun wollt eich das ganze über eine Schleife in html lösen.
Als allererstes habe ich mir den Wert anzeigen lassen.
Die Ausgabe beträgt in meinem Fall 4.0

Code: Alles auswählen

  {{IO_inputs}}
Nun wollte ich eine Schleife programmieren, die 4 Radio Buttons anzeigt
Leider funktioniert dies nicht so, aber kann mir jemand sagen warum?

vielen Dank

{% for test in IO_inputs %}
<input type="radio" value="Test">Radiobutton
{% endfor %}
BlackJack

@erdmulch: Ja natürlich ist die Ausgabe 4.0 und da kann man nicht drüber iterieren. Du hast gefragt wie man die *Anzahl* heraus bekommt, das ist nun mal eine *Zahl*.

Wenn Du vier Elemente mittels Template erzeugen möchtest dann muss `IO_inputs` etwas sein über das man iterieren kann und das vier Elemente enthält. Also zum Beispiel ein `xrange`-Exemplar.
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

OK, das verstehe ich, aber ich weiß ich nicht wie ich dies realisieren soll.
Mir ist die Syntax unklar
Antworten