Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi doppeltes Tag (https://www.delphipraxis.net/95272-doppeltes-tag.html)

JSB 4. Jul 2007 13:30


doppeltes Tag
 
Ich habe folgende XML:

SQL-Code:
<?xml version="1.0" encoding="utf-8"?>
  <Products>
    <Product>
      <ProductIdent>
        <ProductInsert>1</ProductInsert>
        <UserProductID>1234ABSDE</UserProductID>
        <ProductID>0</ProductID>
        <AnrIdent>0</AnrIdent>
        <EANIdent>EE</EANIdent>
      </ProductIdent>
    </Product>
    <Product>
      <ProductIdent>
        <ProductInsert>1</ProductInsert>
        <UserProductID>12345ABSDE</UserProductID>
        <ProductID>0</ProductID>
        <AnrIdent>0</AnrIdent>
        <EANIdent>MYEAN</EANIdent>
      </ProductIdent>
      <Anr>12</Anr>
      <EAN>132456</EAN>
      <Name>test</Name>
    </Product>
  </Products>
</Request>
(Bitte SQL ignorieren) Ich möchte jedes Tag füllen.

Allerdings kommt <Product> doppelt vor...

Delphi-Quellcode:
XMLDocument.childNodes.nodes['Products'].childNodes.nodes['Product'].childNodes.nodes['ProductIdent'].childNodes.nodes['Anr'].nodevalue := 1234567890123;
der oben angegebene Code schreibt leider in das erste Tag? Wie komme ich auf das zeweite?

SirThornberry 4. Jul 2007 14:35

Re: doppeltes Tag
 
bei Node kannst du den Index oder Namen angeben. Anstelle von 'Product' kannst du also auch die Indexe setzen.

JSB 4. Jul 2007 14:47

Re: doppeltes Tag
 
habe ich mir auch überlegt, aber sobald ein Feld hinzugefügt wird ist das ganze nicht mehr verwertbar... :?

da dies ohne Vorwarnung vorkommen wird.... :wall:

Namenloser 4. Jul 2007 15:36

Re: doppeltes Tag
 
Hi,

ich hab eben mal ein Projekt von mir abgewandelt.
Ich hoffe, es hilft (ungetestet!)

Delphi-Quellcode:
var
  products: ixmlnodelist;
  product: ixmlnode;
begin
  products := xmldoc.ChildNodes.FindNode('products').ChildNodes;
  for i := 0 to products.Count-1 do
  begin
    product := products.Get(i);
    if lowercase(product.NodeName) = 'product' then //<-- Das if kannst du weglassen, wenn es eh nur <product>-Tags gibt
    begin
      with product do
      begin
      ...
      end;
    end;
  end;
end;
Edit: Variablennamen geändert...

JSB 5. Jul 2007 07:22

Re: doppeltes Tag
 
ok, interessant. Ich gehe also im Grunde genommen die Indexe durch bis ich das zweite product finde, schränke meine Suche aber auf das Parent ab. Alles klar :thumb:

Es sollte verboten sein Tags gleich zu benennen. Zu mindestens die auf der gleichen ebene.... :evil:

DGL-luke 5. Jul 2007 07:27

Re: doppeltes Tag
 
Es sollte verboten sein Tags gleich zu benennen. Zu mindestens die auf der gleichen ebene.... :evil:[/quote]

nope. das ist usus. mit XPATH oder so kann man auch alle nodes mit gleichem namen auf einer ebene selektieren. da hab ich mich aber noch gar nicht damit beschäftigt...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 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