Seite 1 von 1

XML File auslesen

Verfasst: Samstag 6. Dezember 2014, 16:31
von erdmulch
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>

Re: XML File auslesen

Verfasst: Samstag 6. Dezember 2014, 16:39
von 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

Re: XML File auslesen

Verfasst: Samstag 6. Dezember 2014, 22:24
von erdmulch
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 %}

Re: XML File auslesen

Verfasst: Samstag 6. Dezember 2014, 22:40
von 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.

Re: XML File auslesen

Verfasst: Samstag 6. Dezember 2014, 22:43
von erdmulch
OK, das verstehe ich, aber ich weiß ich nicht wie ich dies realisieren soll.
Mir ist die Syntax unklar