首先,我認爲正則表達式應該很好。
但是,如果你真的想使用XML解析器,我喜歡.NET中的XmlDocument/XmlNode。這兩個函數SelectSingleNode和SelectNodes是無限的。不幸的是,我沒有在我面前一個Word XML例子,讓我們假設這個XML:
<Document>
<MergeField name="phone"></MergeField>
<MergeField name="email"></MergeField>
</Document>
然後,您可以使用代碼如下:
XmlDocument wordDoc = new XmlDocument();
wordDoc.Load(fileName);
XmlNodeList mergeNodes = wordDoc.SelectNodes("//MergeField");
foreach(XmlNode mergeNode in mergeNodes)
{
string fieldName = mergeNode.Attributes["name"].Value;
// Do something here based on field name
// e.g.:
mergeNode.InnerText = GetFieldValue(fielName);
}
doc.Save(fileName);
棘手的部分是Word XML使用XML命名空間所有的地方,所以你需要使用的XmlNamespaceManager類是.NET來告訴XML文檔,其名稱空間是哪個,所以它會更喜歡:
XmlDocument wordDoc = new XmlDocument();
wordDoc.Load(fileName);
XmlNamespaceManager nsm = new XmlNamespaceManager(doc.NameTable);
nsm.AddNamespace("o", "http://somenamepaceurl.com");
XmlNodeList mergeNodes = wordDoc.SelectNodes("//o:MergeField", nsm);
foreach(XmlNode mergeNode in mergeNodes)
{
string fieldName = mergeNode.Attributes["name"].Value;
// Do something here based on field name
// e.g.:
mergeNode.InnerText = GetFieldValue(fielName);
}
doc.Save(fileName);
一是否實際上將自定義XML嵌入到Word模板中?或者你只是在文本中輸入尖括號?它們是有區別的。如果您只是在Word文檔的文本中輸入尖括號,則XML解析器將無濟於事。 – CoderDennis 2009-12-15 17:45:44
感謝Dennis,好吧......最終用戶將通過手動輸入尖括號來輸入這些XML標籤來創建模板。 – iniki 2009-12-15 21:10:16
Inutan,你只是在3個不同的線程中問了同樣的問題3次。這沒有必要。堅持一個問題。 – Cheeso 2009-12-15 21:40:30