| 

.NET C# Java Javascript Exception

1
Hallo NG,

ich möchte einen root Eintrag erstellen der wie folgt aussieht:
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd">

dazu habe ich folgenden Code geschrieben:
XmlNode rootNode = doc.CreateElement("Document");
XmlElement xRootElement = (XmlElement)doc.AppendChild(rootNode);
xRootElement.SetAttribute("xmlns", "urn:iso:std:iso:20022:tech:xsd:pain.001.002.03");
xRootElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
xRootElement.SetAttribute("xsi:schemaLocation", "urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd");

leider kommt hier folgendes Resultat raus:
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd">

in der letzten Zeile fehlt das:
xsi: von xsi:schemaLocation="

Was mache ich falsch???

Danke im voraus für jeden Hinweis und Tipp.

Grüße Ingo
12.09.2013
ingo 122 1 6
4 Antworten
1
Hallo ingo,

wie Matthias schon geschrieben hat, muss der Namespace-URI explizit angegeben werden. Um Probleme mit dem Prefix zu umgehen, ein XmlAttribute wie folgt erstellen und der Attributes Collection hinzufügen:

var attr = doc.CreateAttribute("xsi", "schemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
attr.Value = "urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd";
xRootElement.Attributes.Append(attr);
12.09.2013
Maria Simlinger 1,1k 1 9
0
Ich hätte erstmal auch erwartet, daß es so geht, aber offenbar mußt Du den Namespace-URI explizit angeben:

xRootElement.SetAttribute("schemaLocation", "http://www.w3.org/2001/XMLSchema-instance", "urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd");
12.09.2013
Matthias Hlawatsch 13,2k 4 9
Hallo danke für die Hilfe heraus kommt:
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03" d1p1:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd" xmlns:d1p1="http://www.w3.org/2001/XMLSchema-instance">
und nicht:
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.002.03 pain.001.002.03.xsd">
Grüße Ingo
ingo 12.09.2013
Hast Du
xRootElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
entfernt?
Die Zeile muss drin bleiben!
Matthias Hlawatsch 12.09.2013
0
Wenn ich mich recht erinnere, musste man über XmlDocument.Schemas jedes XmlSchema hinzufügen. Kanns im Moment nicht ausprobieren, hab auch schon länger nichts mehr mit dem DOM gemacht, aber vlt. einen Versuch wert...
12.09.2013
ffordermaier 8,4k 3 9
Hab das grad mal ausprobiert:
doc.Schemas.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
Gibt eine recht mysteriöse Exception:
"DTD ist in diesem XML-Dokument aus Sicherheitsgründen unzulässig. Zum Aktivieren der DTD-Verarbeitung müssen Sie die 'DtdProcessing'-Eigenschaft für 'XmlReaderSettings' auf 'Parse' festlegen und die Einstellungen an die 'XmlReader.Create'-Methode übergeben."
Matthias Hlawatsch 12.09.2013
Dann hab ich wohl falsch geraten...Die Erinnerung ist auch sehr dunkel...Irgendwo in dieser Richtung konnte man diese Namespace-Prefixes verwalten...
ffordermaier 12.09.2013
0
Hallo Maria,

danke für Deine Hilfe!!!!!
Grüße Ingo
13.09.2013
ingo 122 1 6
Hallo Ingo, freut mich, dass ich helfen konnte. Wäre nett, wenn du die Antwort als Lösung markierst. :)
Maria Simlinger 14.09.2013

Stelle deine .net-Frage jetzt!