2
由於工作中的一些決定,我最近已經把焦點從VB.NET轉換到C#。 我試圖從XML文件中讀出數據時,現在遇到了一個問題。卡在循環C#中的XML思路#
這一尺,XML看起來像這樣
<?xml version="1.0" encoding="utf-8"?>
<shipmentdata>
<shipment shipmentid="70716481780000102" messageid="2">
<msgcreated>2012-06-14T10:44:00</msgcreated>
<orderdate>2012-06-14</orderdate>
<services>
<baseservice ediid="ZG8">Replenishment</baseservice>
<addedservices>
<addedservice id="2" ediid="Z47">Installation</addedservice>
<addedservice id="3" ediid="Z45">Swap</addedservice>
</addedservices>
</services>
<weight uom="KGM">2</weight>
<bulkref>123456</bulkref>
</shipment>
</shipmentdata>
的C#-code我有是這樣的:
private DataSet ReturnServices(string FileName)
{
XmlDocument m_xmld = new XmlDocument();
XmlNodeList m_nodelist;
m_xmld.Load(FileName);
m_nodelist = m_xmld.SelectNodes("/shipmentdata");
DataRow aDR;
DataTable aDT = new DataTable("AddedServices");
aDT.Columns.Add("ediid",typeof(string));
aDT.Columns.Add("shipmentid",typeof(string));
DataSet oDS = new DataSet("EDIinfo");
foreach (XmlElement m_node in m_nodelist)
{
ShipmentID = m_node["shipment"].Attributes.
GetNamedItem("shipmentid").Value.ToString();
XmlNodeList s_nodelist = m_xmld.SelectNodes(
"/shipmentdata/shipment/services/addedservices");
foreach (XmlElement s_node in s_nodelist)
{
aDR = aDT.NewRow();
aDR["ediid"] = s_node.ChildNodes.Item(0).Attributes.
GetNamedItem("ediid").Value.ToString();
aDR["shipmentid"] = ShipmentID;
aDT.Rows.Add(aDR);
}
}
oDS.Tables.Add(aDT);
return oDS;
}
這裏的問題是,雖然該文件包含兩個增值服務(Z47和Z45),但由於某種原因,只有第一個節點存儲在DataTable(Z47)中。我如何去循環所有添加的服務節點?
任何幫助,將不勝感激,我一直堅持這一段時間了,現在開始意識到,我可能陷入了一系列難以擺脫的思想和邏輯。 :P
您到達第一個添加的服務節點,但不是第二個:'aDR [「ediid」] = s_node.ChildNodes.Item(0).Attributes.GetNamedItem(「ediid」)。Value.ToString();'也許你打算爲他們循環? – Filip
感謝您抨擊我,我終於醒來,意識到做DR [「ediid」] = s_node.Attributes.GetNamedItem(「ediid」).Value.ToString();幫助解決了這個問題。 :) – JaggenSWE
添加爲答案 – Filip