我正在嘗試編寫一個XML文件,該文件將被另一個服務拾取並解析。爲了發生這種情況,XML必須以非常特定的方式格式化,即:保留C#中XML元素的冗餘名稱空間前綴
<?xml version="1.0"?>
<Feedbacks:Feedbacks xmlns:Feedbacks="Feedbacks">
<Feedbacks:Elements>
<Feedback:XMLFeedback xmlns:Feedback="Feedback">
<Feedback:MfgUnitID></Feedback:MfgUnitID>
<Feedback:MachineId></Feedback:MachineId>
<Feedback:OperationCode></Feedback:OperationCode>
<Feedback:ItemSeqNum></Feedback:ItemSeqNum>
<Feedback:OperDispositionCd></Feedback:OperDispositionCd>
<Feedback:ItemId></Feedback:ItemId>
<Feedback:ParentItemId></Feedback:ParentItemId>
<Feedback:ItemEndSize>1821</Feedback:ItemEndSize>
<Feedback:ItemDispositionCd></Feedback:ItemDispositionCd>
<Feedback:OperStartDate></Feedback:OperStartDate>
<Feedback:OperEndDate></Feedback:OperEndDate>
</Feedback:XMLFeedback>
</Feedbacks:Elements>
</Feedbacks:Feedbacks>
當然在最內層元素之間存在數據。儘管如此,無論我做什麼,我都無法獲得任何C#類來將分號保留在最裏面的節點上。據我所知這些需要保留,那麼在C#中有沒有辦法強制它通過這種方式來格式化節點?我已經嘗試了所有可以在XMLDocument類中找到的創建方法。我可以將外部節點格式化得很好,但內部節點不斷創建問題。
編輯,對不起,這是使內部節點的代碼。
private void AppendFile(string filename, string[] headers, Dictionary<string, string> values)
{
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlNode node = doc.GetElementsByTagName(headers[headers.Length - 2]).Item(0);
string[] hPieces = headers[headers.Length - 1].Split(':');
XmlElement appendee = doc.CreateElement(hPieces[0].Trim(), hPieces[1].Trim(), hPieces[0].Trim());
node.AppendChild(appendee);
foreach (KeyValuePair<string, string> pair in values)
{
string[] ePieces = pair.Key.Split(':');
//XmlElement element = doc.CreateElement(ePieces[0].Trim(), string.Empty, ePieces[1].Trim());
//XmlText text = doc.CreateTextNode(pair.Value);
XmlNode innerNode = doc.CreateNode(XmlNodeType.Element, ePieces[1].Trim(), ePieces[0].Trim());
node.InnerText = pair.Value;
// element.AppendChild(text);
appendee.AppendChild(innerNode);
}
doc.Save(filename);
}
內部節點的數據作爲字典中的鍵值對進入。密鑰包含預定名稱的地方。
EDIT2:這是文件輸出的樣子
<?xml version="1.0" encoding="utf-8"?>
<Feedbacks:Feedbacks xmlns:Feedbacks="Feedbacks">
<Feedbacks:Elements>
<Feedback:XMLFeedback xmlns:Feedback="Feedback">
<MfgUnitID></MfgUnitID>
<MachineId></MachineId>
<OperationCode</OperationCode>
<ItemSeqNum></ItemSeqNum>
<OperDispositionCd></OperDispositionCd>
<ItemId></ItemId>
<ParentItemId></ParentItemId>
<ItemEndSize></ItemEndSize>
<ItemDispositionCd></ItemDispositionCd>
<OperStartDate></OperStartDate>
<OperEndDate></OperEndDate>
</Feedback:XMLFeedback>
</Feedbacks:Elements>
</Feedbacks:Feedbacks>
那麼*會發生什麼?你能顯示你的代碼嗎?我不希望.NET解析器丟掉命名空間信息... – 2012-08-15 18:51:57
你有沒有試過XSD.exe?您可以使用XSD.exe解析所需的xml,它將生成一個可以序列化的C#類... – jle 2012-08-15 18:52:04
這些都是XML命名空間,或者它們看起來像是這樣。它們在XML中具有特定的含義,這就是爲什麼你需要使用batty行爲; XMLDocument將它們視爲名稱空間,而不是XML標籤的一部分。 – 2012-08-15 18:52:07