AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Attribute auslesen

Ein Thema von krys2000 · begonnen am 2. Apr 2008 · letzter Beitrag vom 8. Apr 2008
Antwort Antwort
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#1

Attribute auslesen

  Alt 2. Apr 2008, 21:46
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:
<?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>
Hier ist kein Problem

Delphi-Quellcode:
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;
Aber hier zeigt mir jedes mal nl.length=0!

Delphi-Quellcode:
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;
Ich Bitte Euch hilft mir ich weiss nicht was ich mache soll!
Grüße
Krys
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Attribute auslesen

  Alt 2. Apr 2008, 22:16
Hallo Krys,

du kannst alles in einem erledigen:

Delphi-Quellcode:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#3

Re: Attribute auslesen

  Alt 3. Apr 2008, 18:46
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:
with e.selectSingleNode('//' + ELEM_PROBLEM) as IXMLDOMElement do
      begin
        kat := VarToStr(e.getAttribute(ATTR_KAT));
        beschr := VarToStr(e.getAttribute(ATTR_BESCHR));
      end;
Grüsse
krys2000
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Attribute auslesen

  Alt 3. Apr 2008, 22:17
Hallo,

ein Copy & Paste Fehler von mir - schau dir bitte nochmal den korrigierten Beispiel-Code an.

Gute Nacht
  Mit Zitat antworten Zitat
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#5

Re: Attribute auslesen

  Alt 3. Apr 2008, 23:59
Danke marabu,

für Deine Hilfsbereitschaft, aber es ist beim Altem geblieben.
kat und beschr werden jedes mal als '' ausgelesen.

Delphi-Quellcode:
with e.selectSingleNode({'//' +} ELEM_PROBLEM) as IXMLDOMElement do // EDIT

      begin
        kat := VarToStr(e.getAttribute(ATTR_KAT));
        beschr := VarToStr(e.getAttribute(ATTR_BESCHR));
      end;
Grüsse
Krys2000
  Mit Zitat antworten Zitat
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#6

Re: Attribute auslesen

  Alt 8. Apr 2008, 11:05
Hi Leute,
gibt wirklich keine Möglichkeit die Attribute auszulesen?

Grüsse
krys
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Attribute auslesen

  Alt 8. Apr 2008, 19:17
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:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz