2015-06-21 85 views
-4

我从几个进程中获取机器生成的XML。它们的结构如下所示:用C解析XML#

<Data> 
    <Report> 
    <Machine name="hostA"> 
     <MachineInfo location="LA"> 
     <function name="run">Late</function> 
     <function name="status">Complete</function> 
     <function name="date">2015-06-14</function> 
     </MachineInfo> 
     <RepItem name="1488" direction="NS"> 
     <Desc>None Found</Desc> 
     <Status Int="A12">Uplink</Status> 
     </RepItem> 
     <RepItem name="1489" direction="S"> 
     <Desc>31Ghz Ant at 285ft.</Desc> 
     <Status Int="D5">Active</Status> 
     </RepItem> 
     <RepItem name="1438" direction="W"> 
     <Desc>West N. Oc. Backup</Desc> 
     <Status Int="A11">Disabled</Status> 
     </RepItem> 
     <RepItem name="1141" direction="SE"> 
     <Desc>MDT Co.</Desc> 
     <Status Int="B7">Active</Status> 
     </RepItem> 
    </Machine> 
    <Machine name="hostB"> 
     <MachineInfo location="E. LA"> 
     <function name="run">Late</function> 
     <function name="status">Complete</function> 
     <function name="date">2015-06-14</function> 
     </MachineInfo> 
     <RepItem name="1488" direction="NS"> 
     <Desc>None Found</Desc> 
     <Status Int="A12">Down</Status> 
     </RepItem> 
     <RepItem name="1489" direction="S"> 
     <Desc>31Ghz Ant at 285ft.</Desc> 
     <Status Int="D5">Active</Status> 
     </RepItem> 
     <RepItem name="1438" direction="W"> 
     <Desc>West N. Oc. Backup</Desc> 
     <Status Int="A11">Disabled</Status> 
     </RepItem> 
     <RepItem name="1141" direction="SE"> 
     <Desc>MDT Co.</Desc> 
     <Status Int="B7">Active</Status> 
     </RepItem> 
    </Machine> 
    </Report> 
</data> 

所以我用的XDocument和LINQ玩耍了,但我无法弄清楚如何处理重复元素。代码我扮演的最后一块看起来有点像这样:

XDocument report = XDocument.Load(filename); 
foreach (XElement element in report 
    .Element("Machine") 
    .Elements("RepItem")) 
    { 

所有我想做的是吸在XML和解析它,所以我可以将其加载到记录保存数据库,并通过存储报告程序。

+2

您应该反序列化XML而不是手动解析它 – gaiazov

回答

0

在这个例子中,XML被发送到xmlContent字符串变量,并且数据的根(重复的那个)是Table。 cust_id和cust_name是要在属性Customer中使用相同名称的Customer类中读取的XML标记。

string xmlContent ="the xml content";   

XDocument doc = XDocument.Parse(xml); 

       var data = from item in doc.Descendants("Table") 
          select new Customers 
          { 
           cust_id = XMLManager.TryGetElementValue(item, "cust_id"), 
           cust_name = XMLManager.TryGetElementValue(item, "cust_name"), 

          };