从XML文件中读取特定数据

时间:2010-07-29 15:36:47

标签: xml winforms c#-4.0

我熟悉编写和阅读我自己的XML文件,例如设置,但我需要从一个巨大的xml文件中读取数据,但我找不到我的起点。

<span class="mw-headline" id="Kader_der_Saison_2010.2F11.5B51.5D">
  Kader der Saison 2010/11 
  <sup id="cite_ref-50" class="reference">
      <a href="#cite_note-50">[51]</a> 
  </sup>
</span>
</h3>
<table class="wikitable" width="550px">
   <tr bgcolor="#DDDDDD">
      <th>Name</th> 
      <th>Trikot</th> 
      <th>Nationalität</th> 
   </tr>
   <tr bgcolor="#EEEEEE">
      <th colspan="3" align="left">Torwart</th> 
   </tr>
   <tr bgcolor="#FFFFFF">
     <td>
         <a href="/wiki/Manuel_Almunia" title="Manuel Almunia">Manuel Almunia</a> 
     </td>
     <td align="center">1</td> 
     <td align="center">
        <span style="display:none" class="sortkey">Spanien !</span> 
        <a href="/wiki/Datei:Flag_of_Spain.svg" class="image" title="Spanier">
           <img alt="Spanier" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Spain.svg/20px-Flag_of_Spain.svg.png" width="20" height="13" class="thumbborder" /> 
        </a>
     </td>
  </tr>
- <tr bgcolor="#FFFFFF">
- <td>
  <a href="/wiki/%C5%81ukasz_Fabia%C5%84ski" title="Łukasz Fabiański">Łukasz Fabiański</a> 
  </td>
  <td align="center">21</td> 
- <td align="center">
  <span style="display:none" class="sortkey">Polen !</span> 
- <a href="/wiki/Datei:Flag_of_Poland.svg" class="image" title="Pole">
  <img alt="Pole" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Flag_of_Poland.svg/20px-Flag_of_Poland.svg.png" width="20" height="13" class="thumbborder" /> 
  </a>
  </td>
  </tr>

正如你(也许)可以看到我正试图从维基百科中读取“Kader_der_Saison”旁边的所有团队成员的名字。 我需要这些元素的标题或文字

<a href="/wiki/Manuel_Almunia" title="Manuel Almunia">Manuel Almunia</a>

获得Manuel Almunia,ŁukaszFabiański等人的姓名。

我尝试了几种方式,xmldocument.GetElementById或姓名,XmlReader.NoteTypXmlReader.MoveToNextAttributexmldocument.SelectNode(xpath),甚至尝试了对文档的linq查询,但我不知道到达名字的位置。

如何查找“Kader_der_Saison”排名并阅读以下<a链接文字?

由于

2 个答案:

答案 0 :(得分:1)

这看起来像HTML,而不是XML。假设这是正确的,请参阅this question

如果它确实是Xml(并且有人选择了非常糟糕的标记名称),请将其作为XmlDocument或XPathDocument加载,并使用XPath导航按名称调出节点。

我没有太多使用XPathDocuments,但是使用XmlDocument,您的代码可能类似于:

XmlDocument xDoc = new XmlDocument();
xDoc.Load(yourXml)
var nodes = xDoc.SelectNodes(nodeName);

答案 1 :(得分:0)

C#有一个非常酷的类XmlSerializer,它实际上将XML转换为对象。它可能是一个非常深的XML文件的麻烦,因为你必须为每个节点创建一个对象,但我认为这是切片面包以来最好的事情。