Seite 2 von 2

Re: XML einlesen

Verfasst: 30.04.2012 15:46
von kunstlust
OK das habe ich nur zum Teil verstanden, das die Knoten entscheidend sind, ist mir klar, aber warum werde mir die Daten nun nicht angezeigt?
ich füge mal einen Datensatz aus der XML hinzu, die ich nun als XML-Files einlesen will. Die XML Daten stehen alle in einer Zeile, was ich mal hier geändert habe, damit es besser zu lesen ist:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<Serviceability version="1.3">
<Current_Printer_Configuration>
<Product_Number>CQ109A</Product_Number>
<Serial_Number>MY0A9010</Serial_Number>
<Product_Name>HP Designjet Z620</Product_Name>
<FW_Version>KHN_01_00_09.5</FW_Version>
</Current_Printer_Configuration>
<JOBS_ACCOUNTING_INFO>
<ACCOUNTING_INFO>
<JOB_NAME value="2012-Flyer-RS.pdf"/>
<UUID value="e72483c3-808e-4551-acb4-ed7169f1cb84"/>
<USER_DEFINED value=""/>
<APPLICATION_ID value=""/>
<ACCOUNT_ID value=""/>
<TIMESTAMP value="20120322082426"/>
<PRINTING_TIMESTAMP value="20120322083224"/>
<JOB_STATUS value="0"/>
<USER_NAME value="hormann"/>
<SOURCE value="1"/>
<INK_COVERAGE_CATEGORY value="D"/>
<PRINT_QUALITY value="3"/>
<PRINT_TYPE value="0"/>
<PAGES value="2"/>
<COPIES value="1"/>
<PRINTING_TIME value="3178" units="secondsx10"/>
<SCANNED_AREA value="" units="sqi"/>
<MEDIA_INFO><NAME media-name="HP Premium Fotopapier seidenmatt schnell trocknend" vendor-name=""/>
<QUANTITY value="398" units="sqi"/>
<SIZE units="inchesx3600">
<WIDTH value="59538"/>
<LENGTH value="42102"/>
</SIZE><SOURCE value=""/>
</MEDIA_INFO>-<INK_INFO>
<INK_USED value="3" units="microliters"/>
<CONSUME ink-type="non-HP Ink" quantity="684" color="lm"/>
<CONSUME ink-type="non-HP Ink" quantity="662" color="pk"/>
<CONSUME ink-type="non-HP Ink" quantity="926" color="mk"/>
<CONSUME ink-type="non-HP Ink" quantity="674" color="lc"/>
<CONSUME ink-type="non-HP Ink" quantity="810" color="lg"/>
<CONSUME ink-type="non-HP Ink" quantity="1028" color="R"/>
<CONSUME ink-type="non-HP Ink" quantity="1116" color="M"/>
<CONSUME ink-type="non-HP Ink" quantity="1030" color="Y"/>
</INK_INFO>
</ACCOUNTING_INFO>
</JOBS_ACCOUNTING_INFO>
</Serviceability>
Nun wollte ich die Daten auslesen, normalerweise sind es mehr im Accountingbereich, aber ich dachte einer Datensatz reicht zum Test aus:

Code: Alles auswählen

Define Example.XML

If ImportXML(@Example, "i:\test.xml")
   
Debug Example\Main\Text; wie kann ich nun die "<FW_Version>KHN_01_00_09.5</FW_Version>" hier auslesen? Das habe ich noch nicht verstanden :-(
   
   Debug ":: Namen auflisten"
   ForEach Example\Main\Node("JOB_NAME")\Attributes()
     Debug  Example\Main\Node("JOB_NAME")\Attribute("value")\String; und hier ist die Ausgabe leer, warum verstehe ich nur nicht...
    Next
EndIf
Ich bin Anfänger und bitte euch um etwas Verständnis, das XML-Thema ist sicher nicht gerade der leichtest Teil in purebasic und dazu kommt noch, dass die Daten misst sind, denke ich.

Re: XML einlesen

Verfasst: 30.04.2012 16:06
von STARGÅTE
Also, um auf die Daten einer XML-Struktur/Baum zurück zu greifen, musst du den exakten Pfad zu einem Knoten angeben.

Wenn du "FW_Version" auslesen willst, muss XML wissen, wo es suchen soll.
In deinem Fall hat dieser Knoten den Pfad: Serviceability\Current_Printer_Configuration\Product_Name
Also musst du diesen auch angeben.
Um die Variable etwas kürzer zu machen, kannst du den Knoten "Current_Printer_Configuration" auch zwischenspeichern:

Code: Alles auswählen

IncludePath "C:\Includes\PureBasic"
XIncludeFile "XML.pbi"

Define Example.XML

If ImportXML(@Example, "test.xml")
   *MyNode.XMLNode = Example\Main\Node("Current_Printer_Configuration")
   Debug *MyNode\Node("FW_Version")\Text
   *MyNode.XMLNode = Example\Main\Node("JOBS_ACCOUNTING_INFO")\Node("ACCOUNTING_INFO")
   Debug *MyNode\Node("JOB_NAME")\Attribute("value")\String
EndIf
PS: Das ForEach ist nur dafür gedacht, wenn du nicht genau weißt wie deine Knoten aussehen und du alle auflisten willst.

Re: XML einlesen

Verfasst: 30.04.2012 16:32
von kunstlust
Nochmal 1000 Dank für die Hilfe STARGÅTE, jetzt hab ich es verstanden :bounce: