![]() |
XML-Node mit NULL-Wert füllen (per MSXML)
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:
XML-Code:
Da soll aber stehen
<MyNode/>
XML-Code:
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...
<MyNode xsi:nil="true" xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance"/>
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... :wall: Danke schonmal für Mühe und Anteilnahme |
Re: XML-Node mit NULL-Wert füllen (per MSXML)
Hallo alzaimar,
Zitat:
Grüße vom marabu |
Re: XML-Node mit NULL-Wert füllen (per MSXML)
Hi marabu,
Entschuldigung, wir verwenden den Object-Wrapper (XML Data Binding) von Delphi, um auf die Knoten zuzugreifen. Die Zuweisung ist so:
Delphi-Quellcode:
Das XML-Paket/Dokument holen wir uns über
uses xmldom, XMLDoc, XMLIntf;
... MyXMLNode.ChildNodes['BasePriceUsed'].NodeValue := Null;
Delphi-Quellcode:
Ich persönlich finde ja das '<BasePriceUsed/>' völlig in Ordnung, aber die Java-Seite nicht. Und das kurz vor Weihnachten :wink:
MyXMLNode.XML
Kannst Du helfen? |
Re: XML-Node mit NULL-Wert füllen (per MSXML)
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:
Grüße vom marabu
with MyXMLNode.ChildNodes['BasePriceUsed'] do
begin setAttribute('xsi:nil', 'true'); NodeValue := Null; end; |
Re: XML-Node mit NULL-Wert füllen (per MSXML)
Hach marabu, wat würd'ick ohne Dir bloss tun?
:cheers: wenn Du mal in der Nähe bist ;-) |
Re: XML-Node mit NULL-Wert füllen (per MSXML)
Halt, zu früh gefreut:
Ich kann das Attribut 'xsi:nil' auf "True" setzen, 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? Hat sich erledigt, ich schaff das so:
Delphi-Quellcode:
Ok so?
With MyNode do Begin
SetAttributeNS('xsi:nil','http://www.w3.org/2001/XMLSchema-instance','true'); NodeValue := Null; End; |
Re: XML-Node mit NULL-Wert füllen (per MSXML)
Hallo alzaimar,
Zitat:
Delphi-Quellcode:
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.
With MyNode do Begin
SetAttributeNS('xsi:nil','http://www.w3.org/2001/XMLSchema-instance','true'); NodeValue := Null; End; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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