2012-05-21 62 views
-3
<Peoples> 
<People> 
    <Name>RadheyJang</Name> 
    <Location>India</Location> 
    <Work>Software Developer</Work> 
    <Point>5</Point> 
    <details> 
    <People> 
    <Name>ArunaTiwari</Name> 
    <Location>India</Location> 
    <Work>SoFtwareCoder</Work> 
    <Point>3</Point> 
    <details/> 
    <Test>A</Test> 
    </People> 
    </details> 
    <Test>NA</Test>  
</People> 
</Peoples> 

我能够通过使用下面的代码读取Xml。只读部分的XML文件

     XDocument xmlDoc = XDocument.Load(str); 
         var vrresult = from a in xmlDoc.Descendants("People") 
         select new 
         { 
          Name= a.Element("Name").Value, 
          Location= a.Element("Location").Value, 
          Point= a.Element("Point").Value 
         }; 

         GridView1.DataSource = vrresult; 
         GridView1.DataBind(); 

但它正在阅读详细内容。我想跳过内的内容元素。请让我知道如何跳过细节内的内容。

+0

我以前从来没见过......该错误信息,你可以请编辑您的答案,并添加GridView的标记,并结合了您的代码XML? – McGarnagle

+0

没有Gridview绑定的问题。我会绑定但在阅读时绑定它给错误。 –

+0

啊,呃。我没有给你答案,但是这个链接可能有帮助:http://www.dotnet247.com/247reference/msgs/5/26129.aspx – McGarnagle

回答

0
var ele = XElement.Parse(xml); 
    // change to XElement.Load if loading from file 
    var result = ele.Descendants("Section").Zip(ele.Descendannt("Mark"), (s,m) => new {Section = s.Value, Mark = m.Value}); Now you can create your DataTable: 

    var table = new DataTable(); 
    var marks = new DataColumn("Mark"); 
    var sections = new  DataColumn("Sections"); 
    table.Columns.Add(marks); table.Columns.Add(sections); 
    foreach (var item in result) 
    { 
    var row = table.NewRow(); 
    row["Mark"] = item.Mark;  
    row["Sections"] = item.Section; 
    table.Rows.Add(row); 
    } 

试试这个代码..

+0

我尝试过使用此代码但我想要读取3个值您只读取2个值。请让我知道如何阅读3个值和跳过细节属性。 –

0

我能想到的唯一的事情是,XML是不合法的:

<Peoples> 
<People> *You have an opening People tag here* 
    <Name>RadheyJang</Name> 
    <Location>India</Location> 
    <Work>Software Developer</Work> 
    <Point>5</Point> 
    <details> *You create a details tag here* 
    <People> *You generate the same tag inside of another People tag* 
    <Name>ArunaTiwari</Name> 
    <Location>India</Location> 
    <Work>SoFtwareCoder</Work> 
    <Point>3</Point> 
    <details/> *Then you close the details tag here* 
    <Test>A</Test> 
    </People> 
    </details> *Then you close another one, but there is not a second opening detail tag* 
    <Test>NA</Test>  
</People> 
</Peoples> 

我不知道如果这有助于在所有,但你可能想考虑修正你的XML。

+0

It it system生成XMl文件。 –

+0

@rama不过,如果你的一个应用程序正在创建它,那么你可能想要改变它的生成方式。 – 3aw5TZetdf

+0

@MatthewRz他没有关闭'

'标签和'
'。这是一个空的'
'标签。标签的结束是用'
' – Default

1

您需要使用这个XPath ...

using System.Xml.XPath; 

string xml = @" 
    <Peoples> 
     <People> 
     <Name>RadheyJang</Name> 
     <Location>India</Location> 
     <Work>Software Developer</Work> 
     <Point>5</Point> 
     <details> 
      <People> 
      <Name>ArunaTiwari</Name> 
      <Location>India</Location> 
      <Work>SoFtwareCoder</Work> 
      <Point>3</Point> 
      <details/> 
      <Test>A</Test> 
      </People> 
     </details> 
     <Test>NA</Test>  
     </People> 
    </Peoples>"; 

XDocument xmlDoc = XDocument.Parse(xml); 

var vrresult = from a in xmlDoc.XPathSelectElements("/Peoples/People") 
       select new 
       { 
        Name = a.Element("Name").Value, 
        Location = a.Element("Location").Value, 
        Point = a.Element("Point").Value 
       }; 
+0

Alfonso Harita @ working Fine。 –