需要有关在.NET中解析XML的信息4

问题描述:

我对XML很陌生,并用C#解析它。我试图解析看起来像这样的XML文档:我想使用的XDocument需要有关在.NET中解析XML的信息4

<Msg Version="1.0"> 
    <ProgList> 
    <update sequence="41248" amount="3327" Lvl="1" Grp="1" /> 
    <update sequence="41216" amount="5326" Lvl="2" Grp="1" /> 
    <update sequence="41252" amount="7326" Lvl="3" Grp="1" /> 
    </ProgList> 
</Msg> 

,似乎无法解析出与属性的三个更新。

不过,如果我创建一个包含这种形式的相同数据的XML文档:

<Msg Version="1.0"> 
    <ProgList> 
     <Level> 
      <seq>41248</seq> 
      <amount>3327</amount> 
      <Lvl>1</Lvl> 
      <Grp>1</Grp> 
     </Level> 
     <Level> 
      <seq>41216</seq> 
      <amount>5326</amount> 
      <Lvl>2</Lvl> 
      <Grp>1</Grp> 
     </Level> 
     <Level> 
      <seq>41252</seq> 
      <amount>7326</amount> 
      <Lvl>3</Lvl> 
      <Grp>1</Grp> 
     </Level> 
    </ProgList> 
</Msg> 

我可以分析和使用下面的代码通过Level数据迭代:

String xmlText = String.Empty; 
//String xml = String.Empty; 
int begin = Data.IndexOf("<?xml"); 
int end = Data.IndexOf("</Msg") + 6; 

try 
{ 
    //xml = Data.Substring(begin, end - begin); 
} 
catch { }; 

String xml = 
@"<Msg Version='1.0'> 
           <ProgList> 
            <Level> 
             <seq>41248</seq> 
             <amount>3327</amount> 
             <Lvl>1</Lvl> 
             <Grp>1</Grp> 
            </Level> 
            <Level> 
             <seq>41216</seq> 
             <amount>5326</amount> 
             <Lvl>2</Lvl> 
             <Grp>1</Grp> 
            </Level> 
            <Level> 
             <seq>41252</seq> 
             <amount>7326</amount> 
             <Lvl>3</Lvl> 
             <Grp>1</Grp> 
            </Level> 
           </ProgList> 
</Msg>"; 



try 
{ 
    XDocument xmlDoc = XDocument.Parse(xml); 

    var updates = from x in xmlDoc.Descendants("Level") 
        select new 
        { 
         seq = x.Descendants("seq").First().Value, 
         amt = x.Descendants("amount").First().Value, 
         lvl = x.Descendants("Lvl").First().Value, 
         grp = x.Descendants("Grp").First().Value 
        }; 

    foreach (var x in updates) 
    { 
     String output = String.Format("{0}SEQ: {1} AMT: {2} LVL: {3} GRP: {4}", 
           Environment.NewLine, x.seq, x.amt, x.lvl, x.grp); 
    } 

会如何我解析出第一个XML文档样式?

使用Attribute Method代替Descendants Method

var updates = from x in xmlDoc.Root.Element("ProgList").Elements("update") 
       select new 
       { 
        seq = (int)x.Attribute("sequence"), 
        amt = (int)x.Attribute("amount"), 
        lvl = (int)x.Attribute("Lvl"), 
        grp = (int)x.Attribute("Grp"), 
       }; 
+1

Upvoted。我只是通过要求OP寻找其他示例来添加到此,http://*.com/questions/566167/query-an-xdocument-for-elements-by-name-at-any-depth和查看MSDN中的XDocument文档(http://msdn.microsoft.com/en-us/library/bb360635.aspx) - 只是习惯如何浏览XML文档。 – dash

+0

谢谢dtb和破折号。我很感激帮助。 – Chimera