![]() |
Attribute auslesen
Hi Leute!
Ich möchte von dieser Datei id-prod und beschr auslesen. Ich habe nur wenig Erfahrung mit Xml deshalb Bitte ich um ein Tip was mache ich hier falsch?.
Delphi-Quellcode:
Hier ist kein Problem
<?xml version="1.0" encoding="UTF-8" ?>
<komunikat xmlns="www.bla.gov.pl/xml/zaehler/1" xmlns:kpz="www.bla.gov.pl/xml/zaehler/1" wersja="2" nr-gen="1002" > <klient id="222222" /> <abc:raport-weryf-ware id-klient="101149" vertrag="123456678654" jahr="2008" monat="02"> <abc:raport-weryf id-prod="11794" wers="1" > <problem kat="B" kod="43" beschr="Fehler Beschreibeung_1" /> </abc:raport-weryf> <abc:raport-weryf id-prod="11795" wers="1" > <problem kat="B" kod="44" beschr="Fehler Beschreibeung_2" /> </abc:raport-weryf> <abc:raport-weryf id-prod="11796" wers="1" > <problem kat="B" kod="43" beschr="Fehler Beschreibeung_3" /> </abc:raport-weryf> </abc:raport-weryf-ware> </komunikat>
Delphi-Quellcode:
Aber hier zeigt mir jedes mal nl.length=0!
xmlDoc:=CoDOMDocument40.Create;
xmlDoc.setProperty('NewParser', True); xmlDoc.setProperty('SelectionLanguage', 'XPath'); xmlDoc.setProperty('SelectionNamespaces', 'xmlns:kpz="www.bla.gov.pl/xml/zaehler/1"'); xmlDoc.load(Path + DATABASE_FNAME+'.xml'); FeldName:=''; FeldName:='abc:raport-weryf'; nl := xmlDoc.documentElement.selectNodes('//'+FeldName); for i := 0 to Pred(nl.length) do begin FeldName:=''; e := nl.item[i] as IXMLDOMElement; FeldName:='id-prod'; FeldValue:=e.getAttribute(FeldName); if (not VarIsNull(FeldValue)) then Id_prod := FeldValue; FeldName:='wers'; FeldValue:=e.getAttribute(FeldName); if (not VarIsNull(FeldValue)) then Version := FeldValue; end;
Delphi-Quellcode:
Ich Bitte Euch hilft mir ich weiss nicht was ich mache soll!
FeldName:='';
FeldName:='problem'; nl := xmlDoc.documentElement.selectNodes('//'+FeldName); for i := 0 to Pred(nl.length) do begin FeldName:=''; e := nl.item[i] as IXMLDOMElement; FeldName:='kat'; FeldValue:=e.getAttribute(FeldName); if (not VarIsNull(FeldValue)) then Kategorie := FeldValue; FeldName:='beschr'; FeldValue:=e.getAttribute(FeldName); if (not VarIsNull(FeldValue)) then Beschreibung:= FeldValue; end; Grüße Krys |
Re: Attribute auslesen
Hallo Krys,
du kannst alles in einem erledigen:
Delphi-Quellcode:
Freundliche Grüße
const
ELEM_RAPORT_WERYF = 'abc:raport-weryf'; ELEM_PROBLEM = 'problem'; ATTR_ID_PROD = 'id-prod'; ATTR_WERS = 'wers'; ATTR_KAT = 'kat'; ATTR_BESCHR = 'beschr'; procedure ShowParseError(xd: IXMLDOMDocument2); begin ShowMessage(xd.parseError.reason); end; procedure TDemoForm.ButtonClick(Sender: TObject); var xmlDoc: IXMLDOMDocument2; nl: IXMLDOMNodeList; e: IXMLDOMElement; id_prod, version, kat, beschr, path: string; i: Integer; begin xmlDoc := CoDOMDocument40.Create; xmlDoc.setProperty('NewParser', True); xmlDoc.setProperty('SelectionLanguage', 'XPath'); xmlDoc.setProperty('SelectionNamespaces', 'xmlns:kpz="www.bla.gov.pl/xml/zaehler/1"'); if xmlDoc.load(Path + DATABASE_FNAME+'.xml') then begin nl := xmlDoc.documentElement.selectNodes('//' + ELEM_RAPORT_WERYF); for i := 0 to Pred(nl.length) do begin e := nl.item[i] as IXMLDOMElement; id_prod := VarToStr(e.getAttribute(ATTR_ID_PROD)); version := VarToStr(e.getAttribute(ATTR_WERS)); with e.selectSingleNode({'//' +} ELEM_PROBLEM) as IXMLDOMElement do // EDIT begin kat := VarToStr(e.getAttribute(ATTR_KAT)); beschr := VarToStr(e.getAttribute(ATTR_BESCHR)); end; end; end else ShowParseError(xmlDoc); end; |
Re: Attribute auslesen
Danke marabu,
leider hat sich nichts verändert. An dieser Stelle wird kat und beschr immer noch als '' angezeigt als ob ELEM_PROBLEM nicht vorhanden wäre.
Delphi-Quellcode:
Grüsse
with e.selectSingleNode('//' + ELEM_PROBLEM) as IXMLDOMElement do
begin kat := VarToStr(e.getAttribute(ATTR_KAT)); beschr := VarToStr(e.getAttribute(ATTR_BESCHR)); end; krys2000 |
Re: Attribute auslesen
Hallo,
ein Copy & Paste Fehler von mir - schau dir bitte nochmal den korrigierten Beispiel-Code an. Gute Nacht |
Re: Attribute auslesen
Danke marabu,
für Deine Hilfsbereitschaft, aber es ist beim Altem geblieben. kat und beschr werden jedes mal als '' ausgelesen.
Delphi-Quellcode:
Grüsse
with e.selectSingleNode({'//' +} ELEM_PROBLEM) as IXMLDOMElement do // EDIT
begin kat := VarToStr(e.getAttribute(ATTR_KAT)); beschr := VarToStr(e.getAttribute(ATTR_BESCHR)); end; Krys2000 |
Re: Attribute auslesen
Hi Leute,
gibt wirklich keine Möglichkeit die Attribute auszulesen? Grüsse krys |
Re: Attribute auslesen
Hallo Krys,
es gibt eine Möglichkeit. Hast du nicht bemerkt, dass ich die Attribute von e auslese? Dort gibt es sie aber nicht:
Delphi-Quellcode:
Freundliche Grüße
const
ELEM_RAPORT_WERYF = 'abc:raport-weryf'; ELEM_PROBLEM = 'abc:problem'; ATTR_ID_PROD = 'id-prod'; ATTR_WERS = 'wers'; ATTR_KAT = 'kat'; ATTR_BESCHR = 'beschr'; procedure ShowParseError(xd: IXMLDOMDocument2); begin ShowMessage(xd.parseError.reason); end; procedure TDemoForm.ButtonClick(Sender: TObject); var xmlDoc: IXMLDOMDocument2; nl: IXMLDOMNodeList; e, eProblem: IXMLDOMElement; id_prod, version, kat, beschr, path: string; i: Integer; begin xmlDoc := CoDOMDocument40.Create; xmlDoc.setProperty('NewParser', True); xmlDoc.setProperty('SelectionLanguage', 'XPath'); xmlDoc.setProperty('SelectionNamespaces', 'xmlns:abc="www.bla.gov.pl/xml/zaehler/1"'); if xmlDoc.load(Path + DATABASE_FNAME + '.xml') then begin nl := xmlDoc.documentElement.selectNodes('//' + ELEM_RAPORT_WERYF); for i := 0 to Pred(nl.length) do begin e := nl.item[i] as IXMLDOMElement; id_prod := VarToStr(e.getAttribute(ATTR_ID_PROD)); version := VarToStr(e.getAttribute(ATTR_WERS)); eProblem := e.selectSingleNode(ELEM_PROBLEM) as IXMLDOMElement; if Assigned(eProblem) then begin kat := VarToStr(eProblem.getAttribute(ATTR_KAT)); beschr := VarToStr(eProblem.getAttribute(ATTR_BESCHR)); ShowMessage(kat + sLineBreak + beschr); end; end; end else ShowParseError(xmlDoc); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz