Frage zur CData-Section in XML-Dateien

30/10/2009 - 10:51 von Carsten Ilwig | Report spam
Hallo Leute,

ich habe hier ein Beispiel füe eine einfache XML-Datei:

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<kontakte>
<kundenstatusid>1</kundenstatusid>
<postadressid>a9487f3f-202b-4fd3-9f09-e6c0d644b0bc</postadressid>
<info1>
{tf1\ansi\ansicpg1252\uc0\deff0{\fonttbl
{\f0\fswiss\fcharset0\fprq2 Arial;}
{\f1\fswiss\fcharset0\fprq2 Microsoft Sans Serif;}
{\f2\froman\fcharset2\fprq2
Symbol;}}{\colortbl;ed0\green0\blue0;ed255\green255\blue255;}
{\stylesheet{\s0\itap0\f0\fs24 [Normal];}{\*\cs10\additive Default
Paragraph Font;}}
{\*\generator TX_RTF32 11.0.401.501;}
\deftab1134\paperw12240\paperh15840\margl1440\margt1440\margr1440\margb1440\pard\itap0\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\plain\f1\fs17
ab 01.01.01. 35% Rabatt.\par\par }
</info1>
<info2>
{tf1\ansi\ansicpg1252\uc0\deff0{\fonttbl
{\f0\fswiss\fcharset0\fprq2 Arial;}
{\f1\fswiss\fcharset0\fprq2 Microsoft Sans Serif;}
{\f2\froman\fcharset2\fprq2 Symbol;}}
{\colortbl;ed0\green0\blue0;ed255\green255\blue255;}
{\stylesheet{\s0\itap0\f0\fs24 [Normal];}{\*\cs10\additive Default
Paragraph Font;}}
{\*\generator TX_RTF32 11.0.401.501;}
\deftab1134\paperw12240\paperh15840\margl1440\margt1440\margr1440\margb1440\pard\itap0\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\plain\f1\fs17
ab 01.01.01. 35% Rabatt.\par\par }
</info2>
<info3>
{tf1\ansi\ansicpg1252\uc0\deff0{\fonttbl
{\f0\fswiss\fcharset0\fprq2 Arial;}
{\f1\fswiss\fcharset0\fprq2 Microsoft Sans Serif;}
{\f2\froman\fcharset2\fprq2 Symbol;}}
{\colortbl;ed0\green0\blue0;ed255\green255\blue255;}
{\stylesheet{\s0\itap0\f0\fs24 [Normal];}{\*\cs10\additive Default
Paragraph Font;}}
{\*\generator TX_RTF32 11.0.401.501;}
\deftab1134\paperw12240\paperh15840\margl1440\margt1440\margr1440\margb1440\pard\itap0\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\plain\f1\fs17
ab 01.01.01. 35% Rabatt.\par\par }
</info3>
</kontakte>
</DocumentElement>

Wenn ich jetzt die Inhalte der 3 Infowerte in je eine CData-Section ablegen
möchte, wie stelle ich das an?
Grundsàtzlich weiß ich zwar, wie man Daten in einer CData-Section ablegt,
aber ich habe bisher keinen Weg gefunden,
mehrer namentlich benannte CData-Sectionen in einem Knoten unterzubringen,
da ich einer CDataSection ja keinen Namen zuweisen kann:

XmlCDataSection node = document.CreateCDataSection(data);

Vielen Dank für Eure Hilfe
Carsten
 

Lesen sie die antworten

#1 Martin Honnen
30/10/2009 - 12:21 | Warnen spam
Carsten Ilwig wrote:

<DocumentElement>
<kontakte>
<kundenstatusid>1</kundenstatusid>
<postadressid>a9487f3f-202b-4fd3-9f09-e6c0d644b0bc</postadressid>
<info1>
{tf1\ansi\ansicpg1252\uc0\deff0{\fonttbl
{\f0\fswiss\fcharset0\fprq2 Arial;}
{\f1\fswiss\fcharset0\fprq2 Microsoft Sans Serif;}
{\f2\froman\fcharset2\fprq2
Symbol;}}{\colortbl;ed0\green0\blue0;ed255\green255\blue255;}
{\stylesheet{\s0\itap0\f0\fs24 [Normal];}{\*\cs10\additive Default
Paragraph Font;}}
{\*\generator TX_RTF32 11.0.401.501;}

\deftab1134\paperw12240\paperh15840\margl1440\margt1440\margr1440\margb1440\pard\itap0\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\plain\f1\fs17
ab 01.01.01. 35% Rabatt.\par\par }
</info1>
<info2>
{tf1\ansi\ansicpg1252\uc0\deff0{\fonttbl
{\f0\fswiss\fcharset0\fprq2 Arial;}
{\f1\fswiss\fcharset0\fprq2 Microsoft Sans Serif;}
{\f2\froman\fcharset2\fprq2 Symbol;}}
{\colortbl;ed0\green0\blue0;ed255\green255\blue255;}
{\stylesheet{\s0\itap0\f0\fs24 [Normal];}{\*\cs10\additive Default
Paragraph Font;}}
{\*\generator TX_RTF32 11.0.401.501;}

\deftab1134\paperw12240\paperh15840\margl1440\margt1440\margr1440\margb1440\pard\itap0\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\plain\f1\fs17
ab 01.01.01. 35% Rabatt.\par\par }
</info2>
<info3>
{tf1\ansi\ansicpg1252\uc0\deff0{\fonttbl
{\f0\fswiss\fcharset0\fprq2 Arial;}
{\f1\fswiss\fcharset0\fprq2 Microsoft Sans Serif;}
{\f2\froman\fcharset2\fprq2 Symbol;}}
{\colortbl;ed0\green0\blue0;ed255\green255\blue255;}
{\stylesheet{\s0\itap0\f0\fs24 [Normal];}{\*\cs10\additive Default
Paragraph Font;}}
{\*\generator TX_RTF32 11.0.401.501;}

\deftab1134\paperw12240\paperh15840\margl1440\margt1440\margr1440\margb1440\pard\itap0\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\plain\f1\fs17
ab 01.01.01. 35% Rabatt.\par\par }
</info3>
</kontakte>
</DocumentElement>

Wenn ich jetzt die Inhalte der 3 Infowerte in je eine CData-Section
ablegen möchte, wie stelle ich das an?
Grundsàtzlich weiß ich zwar, wie man Daten in einer CData-Section
ablegt, aber ich habe bisher keinen Weg gefunden,
mehrer namentlich benannte CData-Sectionen in einem Knoten unterzubringen,
da ich einer CDataSection ja keinen Namen zuweisen kann:

XmlCDataSection node = document.CreateCDataSection(data);



Wie du die CDataSection-Knoten erzeugst, ist dir ja bekannt.
Untergebracht werden sie dann mit AppendChild oder InsertBefore/After
oder ReplaceChild.

Nur hast du wenig erzàhlt, wo du genau die CDataSection-Knoten
unterbringen willst. Sollen diese in ein zweites XmlDocument? Oder wo
genau im obigen Dokument willst du diese unterbringen?

So du den Inhalt der info<n>-Elemente in CDATA-Sektionen umwandeln
willst, dann etwa per


XmlDocument doc = new XmlDocument();
doc.Load("input.xml");
foreach (XmlElement info in doc.SelectNodes(
"DocumentElement/kontakte/*[starts-with(local-name(), 'info')]"))
{
info.ReplaceChild(doc.CreateCDataSection(info.InnerText),
info.FirstChild);
}
doc.Save("output.xml");



Martin Honnen MVP XML
http://msmvps.com/blogs/martin_honnen/

Ähnliche fragen