Laden...

Xml Element mit Präfix schreiben

Erstellt von T-Man vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.800 Views
T
T-Man Themenstarter:in
210 Beiträge seit 2006
vor 16 Jahren
Xml Element mit Präfix schreiben

Moin!

Ich muss Word-Xml Dateien bearbeiten und habe dabei ein kleines Problem.

Hier ein kleines Beispiel und danach dann das Problem:


            XmlDocument doc = new XmlDocument();
            doc.Load(@"C:\Users\T-man\Documents\upload\document.xml");
            string ns = doc.DocumentElement.GetNamespaceOfPrefix("w");
            XmlNamespaceManager nsmngr = new XmlNamespaceManager(doc.NameTable);
            nsmngr.AddNamespace("w", ns);
            foreach (XmlNode sdt in doc.SelectNodes("//w:sdt[w:sdtPr/w:tag/@w:val and w:sdtContent]", nsmngr))
            {
                XmlNode tagAttr = sdt.SelectSingleNode("w:sdtPr/w:tag/@w:val", nsmngr);
                if (tagAttr != null)
                {
                    string tagVal = tagAttr.Value.ToLower();
                    if (tagVal.StartsWith("myattribute_"))
                    {
                        tagVal = tagVal.Substring(12);
                        XmlNode cont = sdt.SelectSingleNode("w:sdtContent", nsmngr);
                        if (cont != null)
                        {
                            cont.RemoveAll();
                            XmlElement p = doc.CreateElement("w:p");
                            XmlElement r = doc.CreateElement("w:r");
                            XmlElement t = doc.CreateElement("w:t");
                            XmlText v = doc.CreateTextNode(tagVal);
                            t.AppendChild(v);
                            r.AppendChild(t);
                            p.AppendChild(r);
                            cont.AppendChild(p);
                        }

                    }
                }
            }
            doc.Save(@"C:\Users\T-man\Documents\upload\document2.xml");

Der Code funktioniert fast wunderbar. Einziges Problem: Die neu geschriebenen Elemente sehen so aus:


<p>
  <r>
    <t>text</t> 
  </r>
</p>

was ich aber eigentlich haben wollte ist folgendes:


<w:p>
  <w:r>
    <w:t>text</w:t> 
  </w:r>
</w:p>

Kann mir jemand sagen, was ich tun muss, damit das Präfix mit geschrieben wird?

Vielen Dank schonmal in vorraus.
T-Man

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo T-Man,

sorry wenn ich mich kurz halte:
MSDN - XmlDocument.CreateElement(string, string, string)

Bitte beachten, dass man als namespace uri auch String.Empty verwenden kann.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

T
T-Man Themenstarter:in
210 Beiträge seit 2006
vor 16 Jahren

Hallo T-Man,

sorry wenn ich mich kurz halte:

>

Bitte beachten, dass man als namespace uri auch String.Empty verwenden kann.

Grüße
Norman-Timo

Danke! Mit CreateElement("w", "p", string.Empty) bekam ich das gleiche Ergebnis. Erst als ich auch noch den Namespace mit übergeben habe, klappte es.

Gruß
T-Man