AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Attribute die ich gar nicht explizit erstellt habe
Thema durchsuchen
Ansicht
Themen-Optionen

Attribute die ich gar nicht explizit erstellt habe

Offene Frage von "Svenkan"
Ein Thema von cherry · begonnen am 14. Mai 2007 · letzter Beitrag vom 22. Sep 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Attribute die ich gar nicht explizit erstellt habe

  Alt 14. Mai 2007, 13:37
Hallo zusammen...

Ich erstelle mit MSXML (v5) XML -Dateien, leider habe ich ein kleines Problem...
Der Prolog meiner Datei enthält drei Attribute:

XML-Code:

<?xml version="1.0" encoding="utf-8"?>

<subjectData xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://innosolv.ch/namespace/isag">

 ...
Jetzt zu meinem Problem... das letzte der drei Attribute "xmlns" wird für jedes
Element in der gleichen Ebene übernommen ohne dass ich das explizit angegeben habe,
ich kanns auch nicht löschen. Aber der wert wurde nicht übernommen,

also xmlns="" statt xmlns="http://innosolv.ch/namespace/isag">

So sieht also die Datei aus...
Siehe <PACKAGE> und <SUBJECT EVENT>... dort sollten keine Attribute sein!

XML-Code:

 <?xml version="1.0" encoding="utf-8" ?>
- <subjectData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://innosolv.ch/namespace/isag">
- <package xmlns="">
- <sender>
- <user>
  <userName>sa</userName>
  </user>
  <swSystemID>1</swSystemID>
  <swSystemName>BASIS</swSystemName>
  </sender>
- <receiver>
  <swSystemID>4700</swSystemID>
  </receiver>
- <transaction>
  <transactionID>101069</transactionID>
  <transactionCase>10000</transactionCase>
  <transactionDate>2007-05-14</transactionDate>
  <transactionAcknowledge>true</transactionAcknowledge>
  <transactionDescription>Import subjekt</transactionDescription>
  </transaction>
  </package>
- <subjectEvent xmlns="">
  <mutationType>I</mutationType>
  <referenceID>101069</referenceID>
  <referenceType>1</referenceType>
  <extPosID>101069</extPosID>
  <eventID />
  <redundancyCheck>1</redundancyCheck>
- <subject>
  <name>FakeBetrieb1_TestRaphael</name>
  <correspondenceLanguage rvcd="1">Schweizerdeutsch</correspondenceLanguage>
  <mrMrs rvcd="3">Firma</mrMrs>
  <classOfBusiness rvcd="2001">Verein</classOfBusiness>
- <NotNaturalPerson>
  <legalForm rvcd="11">Einfache Gesellschaft</legalForm>
  <formationType rvcd="5">Eröffnung</formationType>
  <formationDate>14.05.07</formationDate>
  </NotNaturalPerson>
- <address>
  <addressReferenceID>1</addressReferenceID>
  <addressTypeOf rvcd="1">Silberhornweg</addressTypeOf>
  <additionalAddress>fam.</additionalAddress>
  <validFrom>10.05.04</validFrom>
  <note xsi:nil="true">Dies ist die Notiz zur Adresse!</note>
- <place>
  <street>Silberhornweg</street>
  <houseNumber>18</houseNumber>
- <city>
  <cityID />
  <zipCodeID>1830</zipCodeID>
  <zipCode>3661</zipCode>
  <town>Uetendorf</town>
  <country rvcd="CH">Schweiz</country>
  <zipCodeAddOn>00</zipCodeAddOn>
  </city>
  </place>
  </address>
  </subject>
  </subjectEvent>
  </subjectData>
So wird der Prolog mit den Attributen erstellt:

Delphi-Quellcode:
 
  ...
 
  // Microsoft Document Object Model - Document erstellen
  xmlDoc := CoDOMDocument40.Create;

  // (Rootnode) Wurzelelement erzeugen
  root := xmlDoc.createElement('subjectData');

  // Prolog mit Steueranweisungen (Processing instructions)
  instr := xmlDoc.createProcessingInstruction('xml', 'version="1.0" encoding="utf-8"');
  xmlDoc.appendChild(instr);

  // Wurzelelement dem DOMDocument hinzufügen
  xmlDoc.appendChild(root);

  // node := root / nur anders formuliert
  node := xmlDoc.selectSingleNode('subjectData');

  // 1. Attribut für RootNode erzeugen
  attr := xmlDoc.createAttribute('xmlns:xsd');
  attr.value := 'http://www.w3.org/2001/XMLSchema';
  node.attributes.setNamedItem(attr);

  // 2. Attribut für RootNode erzeugen
  attr := xmlDoc.createAttribute('xmlns:xsi');
  attr.value := 'http://www.w3.org/2001/XMLSchema-instance';
  node.attributes.setNamedItem(attr);

  // 3. Attribut für RootNode erzeugen
  attr := xmlDoc.createAttribute('xmlns');
  attr.value := 'http://innosolv.ch/namespace/isag';
  node.attributes.setNamedItem(attr);

  ...
Hat da jmd eine Idee warum die Attribute erstellt werden ohne das ich
das so will¿

Danke für deine Hilfe...

LG enemyleft

[edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit]
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Attribute die ich gar nicht explizit erstellt habe¿

  Alt 16. Mai 2007, 14:20
Hi,
auf den ersten Blick sieht das richtig aus. Sicher, dass du attrib nicht später nochmal verwendest?

Chris
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Attribute die ich gar nicht explizit erstellt habe¿

  Alt 16. Mai 2007, 14:46
Hi CalganX

Danke für deine Antwort...
Aber nein, attr wird zwar nochmals verwendet jedoch vorher einen anderen Wert zugewiesen...

Ich hab mal das Projekt gepostet, dann kannst du vielleicht den Fehler erruieren?!
Ich verwende TEButton statt TEButton, musst sie wohl ersetzen.. sorry oder die Komponente installieren..
Komponente: EButton Komponente

Wär froh um deine Hilfe...

THX & LG cherry
Angehängte Dateien
Dateityp: rar project1_601.rar (257,9 KB, 16x aufgerufen)
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Attribute die ich gar nicht explizit erstellt habe¿

  Alt 16. Mai 2007, 14:58
Hi,
habe leider im Moment keine Möglichkeit den Code zu kompilieren. Aber warum verwendest du anfangs node? Nimm doch direkt root. Eventuell behebt das schon dein Problem.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: Attribute die ich gar nicht explizit erstellt habe¿

  Alt 16. Mai 2007, 15:01
Schade... Danke für deinen Tipp. Das hab ich anfangs so gemacht, also root und nicht node verwendet,
dann hab ichs mal so probiert und mit erhofft das es eben mit node geht...

ergibt beides das selbe resultat.. bringt also nichts - habs grade eben nochmals versucht...
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#6

Re: Attribute die ich gar nicht explizit erstellt habe¿

  Alt 26. Mai 2007, 09:37
Kann mir keiner weiterhelfen?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Attribute die ich gar nicht explizit erstellt habe¿

  Alt 26. Mai 2007, 12:21
Hallo,

schalte dazu einfach die DoNameSpaceDecl aus. Ist eine Einstellung unter Options bei deinem XML Dokument, dann sollte dein Problem behoben sein.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
marabu

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

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 26. Mai 2007, 15:00
Hallo Raphael,

die Leerattribute (xmlns="") sind eigentlich ganz einfach zu erklären: Du verwendest Techniken zum Aufbau deines XML-Dokuments, die ab CoXMLDOMDocument40 nur beim Arbeiten ohne Namespaces funktionieren. Sobald du mit Namespaces arbeitest musst du anders vorgehen. Die Methode CreateElement() erzeugt ein neues Element grundsätzlich ohne Namespace, also auch nicht im Default Namespace. Um ein Element im Default (oder einem beliebigen) NameSpace zu erzeugen musst du die Methode CreateNode() verwenden:

Delphi-Quellcode:
var
  nsDef: string;
  nPackage, nSender, nUser: IXMLDOMNode;
begin
  nsDef := 'http://innosolv.ch/namespace/isag';
  // ...
  nPackage := root.appendChild(xmlDoc.createNode(NODE_ELEMENT, 'package', nsDef));
  nSender := nPackage.appendChild(xmlDoc.createNode(NODE_ELEMENT, 'sender', nsDef));
  nUser := nSender.appendChild(xmlDoc.createElement('user'));
  // ...
end;
Bei der Beschaffung von Knotenreferenzen über XPATH wirst du im Zusammenhang mit dem Default Namespace über ein weiteres Problem stolpern, das an anderer Stelle bereits beleuchtet wurde. Ich würde in deinem Fall die eingefügten Knoten zwischenspeichern, wenn du sie später noch mal brauchst.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#9

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 26. Mai 2007, 16:44
hallo marabu, vielen Dank für deine Antwort. Wenigstens tappe ich jetzt nicht
mehr ganz im Dunkeln. Ich hab mal den Code von dir übernommen und so verändert,
dass meiner Meinung nach eine XML Datei geschrieben wird.

Das ist mein Code:

Delphi-Quellcode:
  nsDef : String;
  nRoot, nPackage, nSender, nUser: IXMLDOMNode;
begin

  nsDef := 'http://innosolv.ch/namespace/isag';

  // Microsoft Document Object Model - Document erstellen
  xmlDoc := CoDOMDocument40.Create;

  // (Rootnode) Wurzelelement erzeugen
  root := xmlDoc.createElement('subjectData');

  nPackage := root.appendChild(xmlDoc.createNode(NODE_ELEMENT, 'package', nsDef));
  nSender := nPackage.appendChild(xmlDoc.createNode(NODE_ELEMENT, 'sender', nsDef));
  nUser := nSender.appendChild(xmlDoc.createElement('user'));
  
  xmlDooc.Save('C:\HalloWelt.xml');
Na ja und das Dokument wird auch erstellt, nur ist es komplett leer.
Wo mach ich da den Überlegungsfehler, ist sicher was peinliches

...

// EDIT:
Oops, vergessen root zo appenden!

thx
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#10

Re: Attribute die ich gar nicht explizit erstellt habe

  Alt 26. Mai 2007, 18:33
So - Noch ne frage dazu...

xmlns=... wurde übernommen, wie erstelle ich aber die anderen Attribute für den Prolog -> xmlnssd und xmlnssi ?!
mit attribute.setNamedItem(...) oder gibts da auch ne elegantere Variante??

LG
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 18:20 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