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
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!”
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