Hallo zusammen,
bin schon seit Tagen dabei das Problem mit dem XNamespace zu lösen, aber irgendwie bringt mich das Internet auch nicht mehr weiter.
Ich versuche eine XML-Datei zu erstellen mit folgender Struktur:
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.008.002.02 pain.008.002.02.xsd" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.002.02">
<CstmrDrctDbtInitn>
.......
Der Code:
XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
XNamespace defaultNamespace = XNamespace.Get("urn:iso:std:iso:20022:tech:xsd:pain.008.002.02");
XElement root = new XElement(defaultNamespace + "Document",
new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
new XAttribute(xsi + "schemaLocation", "urn:iso:std:iso:20022:tech:xsd:pain.008.002.02 pain.008.002.02.xsd"));
XElement root2 = new XElement("CstmrDrctDbtInitn",
new XElement("GrpHdr",
new XElement("MsgId", "MES001-20130830134810")
));
root.Add(root2);
root.Save(pfad);
Soweit so gut. Aber ich bekommen bei den zweiten Element immer folgendes raus:
<CstmrDrctDbtInitn xmlns="">
Ich hoffe jemand kann mir sagen was ich falsch mache.
Danke
Hallo,
ich hab's gelöst:
XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
XNamespace none = "urn:iso:std:iso:20022:tech:xsd:pain.008.002.02";
XElement root = new XElement(none + "Document",
new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
new XAttribute(xsi + "schemaLocation", "urn:iso:std:iso:20022:tech:xsd:pain.008.002.02 pain.008.002.02.xsd"));
Schöne Grüße
Soetwas wie einen Default-Namespace (den du hier möchtest) kann XLinq nicht (zumindest nicht so).
Weil das Element CstmrDrctDbtInitn
auch zum Namespace urn:iso:std...
gehört, musst du auch in jedem Fall den Namespace dazuschreiben:
XNamespace pain = "urn:iso:std:iso:20022:tech:xsd:pain.008.002.02";
var root = new XElement(pain + "Document", [...],
new XElement(pain + "CstmrDrctDbtInitn", [...]));
So hab ich es jetzt gelöst:
XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
XNamespace none = "urn:iso:std:iso:20022:tech:xsd:pain.008.002.02";
XElement root = new XElement(none + "Document",
new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
new XAttribute(xsi + "schemaLocation", "urn:iso:std:iso:20022:tech:xsd:pain.008.002.02 pain.008.002.02.xsd"));
XElement root2 = new XElement(none + "CstmrDrctDbtInitn",
new XElement("GrpHdr", [....]));
C#-Code bitte mit [[nop][/nop]csharp]-Tags eingeben.
Hallo Mary81,
hat es eigentlich iregndwelche Probleme mit den so erstellen SEPA_XML-Dateien gegeben ???
Hntergrund:
lt. Anlage 3 der Schnittstellenspezifikation für die Datenfernübertragung zwischen Kunde und Kreditinstitut gemäß DFÜ-Abkommen „Spezifikation der Datenformate“
Version 2.7 vom 25.3.2013
ist es
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03 pain.001.003.03.xsd"> <CstmrCdtTrfInitn>
und auch ich schaffe "nur" den Namespace hinten:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.008.002.02 pain.008.002.02.xsd" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.002.02">
Ich habe zwar nichts gefunden, was die Reihenfolge im Root-Element zwischen Namespace und Attribute regelt, aber man kann ja nie wissen.
MfG ChrisProg