AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML-Node mit NULL-Wert füllen (per MSXML)
Thema durchsuchen
Ansicht
Themen-Optionen

XML-Node mit NULL-Wert füllen (per MSXML)

Ein Thema von alzaimar · begonnen am 6. Dez 2005 · letzter Beitrag vom 8. Dez 2005
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

XML-Node mit NULL-Wert füllen (per MSXML)

  Alt 6. Dez 2005, 10:07
Wir haben hier ein XML-Dokument (Importiert mit Delphi 6.0). Einer der Knoten ist als decimal (nillable=true) definiert. Wenn wir diesem Knoten den Wert 'NULL' zuweisen und das XML-Dokument erzeugen, steht da:
<MyNode/> Da soll aber stehen
<MyNode xsi:nil="true" xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance"/> Unabhängig davon das es wohl schwachsinnig ist, für ein 'Nichts' so viel Text zu verschicken, fragen wir uns, wie wir MSXML 2.0 dazu bekommen, diesen "xsi:nil="true"... "-Quatsch zu erzeugen? Die Gegenseite (Java) akzeptiert nämlich nur das...

Da sich die Struktur der XML-Dokumente laufend ändert, bräuchten wir eine allgemeingültige Lösung. Derzeit behelfen wir uns nämlich mit 'StrReplace', was ja wohl nicht sein kann...

Danke schonmal für Mühe und Anteilnahme
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

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

Re: XML-Node mit NULL-Wert füllen (per MSXML)

  Alt 6. Dez 2005, 13:37
Hallo alzaimar,

Zitat von alzaimar:
Wir haben hier ein XML-Dokument (Importiert mit Delphi 6.0). Einer der Knoten ist als decimal (nillable=true) definiert. Wenn wir diesem Knoten den Wert 'NULL' zuweisen und das XML-Dokument erzeugen,
was steht in der Uses Klausel - MSXML oder MSXML2? Kannst du noch die 3 Zeilen Code angeben, mit denen du den Knoten auf NULL setzt und das XML-Dokument erzeugst? Ich stehe sonst etwas im Dunkeln.

Grüße vom marabu
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: XML-Node mit NULL-Wert füllen (per MSXML)

  Alt 6. Dez 2005, 13:51
Hi marabu,

Entschuldigung, wir verwenden den Object-Wrapper (XML Data Binding) von Delphi, um auf die Knoten zuzugreifen. Die Zuweisung ist so:
Delphi-Quellcode:
uses xmldom, XMLDoc, XMLIntf;
...
MyXMLNode.ChildNodes['BasePriceUsed'].NodeValue := Null;
Das XML-Paket/Dokument holen wir uns über
MyXMLNode.XML Ich persönlich finde ja das '<BasePriceUsed/>' völlig in Ordnung, aber die Java-Seite nicht. Und das kurz vor Weihnachten

Kannst Du helfen?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

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

Re: XML-Node mit NULL-Wert füllen (per MSXML)

  Alt 6. Dez 2005, 17:05
Hi alzaimar,

wenn du den NodeValue auf Null setzt, dann werden existierende Attribute nicht angefasst - die müssen vorher schon gefehlt haben. Du musst die Attribute einfach irgendwann zugeben:

Delphi-Quellcode:
with MyXMLNode.ChildNodes['BasePriceUsed'] do
begin
  setAttribute('xsi:nil', 'true');
  NodeValue := Null;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: XML-Node mit NULL-Wert füllen (per MSXML)

  Alt 6. Dez 2005, 17:19
Hach marabu, wat würd'ick ohne Dir bloss tun?
wenn Du mal in der Nähe bist
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: XML-Node mit NULL-Wert füllen (per MSXML)

  Alt 8. Dez 2005, 19:27
Halt, zu früh gefreut:
Ich kann das Attribut 'xsi:nil' auf "True" setzen, aber beim Versuch, das zweite Attribut ('xmlnssi') zu setzen, tritt ein Fehler auf (das Attribut ist schreibgeschützt, so so)... Wie macht das denn nun?

Hat sich erledigt, ich schaff das so:
Delphi-Quellcode:
With MyNode do Begin
  SetAttributeNS('xsi:nil','http://www.w3.org/2001/XMLSchema-instance','true');
  NodeValue := Null;
End;
Ok so?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

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

Re: XML-Node mit NULL-Wert füllen (per MSXML)

  Alt 8. Dez 2005, 20:48
Hallo alzaimar,

Zitat von alzaimar:
aber beim Versuch, das zweite Attribut ('xmlns:xsi') zu setzen, tritt ein Fehler auf (das Attribut ist schreibgeschützt, so so)... Wie macht das denn nun?
nur beim Versuch eine vorhandene NameSpace-Deklaration zu ändern wird diese Exception geworfen. Einmal darfst du schon.

Delphi-Quellcode:
With MyNode do Begin
  SetAttributeNS('xsi:nil','http://www.w3.org/2001/XMLSchema-instance','true');
  NodeValue := Null;
End;
Was willst du damit bezwecken? Der NameSpaceURI wird in der Regel beim DocumentElement deklariert - alle childNodes mit entsprechendem Präfix erben den NameSpaceURI. Unter dieser Voraussetzung wird dein hier gezeigter Code keinen Fehler werfen, aber du wirst den NameSpaceURI auch nicht sehen, wenn du dir den erzeugten XML-Code anschaust - wegen der Vererbung.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:42 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