如何解析XML文件

6 浏览
0 Comments

如何解析XML文件

这个问题已经在此处有答案:

如何解析XML文件?[已关闭]

我有一个看起来像这样的XML文件:

  
    
      
      http%3A%2F%2Fwww.jason.org%2F
      
      
        
          News
          http%3A%2F%2Fwww.jason.org%2FPublic%2FNews%2FNews.aspx
        
        
          register
          http%3A%2F%2Fwww.jason.org%2Fpublic%2Fregistration%2Fregistration.aspx
        
        
          Argonauts
          http%3A%2F%2Fwww.jason.org%2FPublic%2FArgonauts%2FArgonauts.aspx
        
        
          Curriculum
          http%3A%2F%2Fwww.jason.org%2FPublic%2FCurriculum%2FCurriculum.aspx
        
        
          Credits
          http%3A%2F%2Fwww.jason.org%2Fpublic%2FMisc%2FCredits.aspx
        
      
      National+Science+Education+Standards, National+Geographic+Society, Physical+Science, Professional+Development, Earth+Science
    
  

...我很困惑如何读取它。我只想将标题、描述和URL分别放入字符串中。类似于:

foreach line in lines
string title = gettitle;
string description = getdescription;
string url = geturl;

...我阅读了很多教程,但它们似乎都不与我需要做的相关。有人可以帮我解答吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

为了扩展LINQ to XML建议,你可以使用一个选择语句来创建代表解析出来的链接的对象:

XDocument doc = XDocument.Load(filename);
var links = from link in doc.Descendants("inside_link")
            select new
            {
                Description = (string)link.Element("description"),
                Url = HttpUtility.UrlDecode((string)link.Element("url"))
            };
foreach(var l in links)
    Console.WriteLine("{1}", l.Url, l.Description);

在这种情况下,links将是一个包含匿名类型的序列,该类型具有DescriptionUrl属性,并解码Url。此foreach将显示类似于以下内容:

News
register
...

0
0 Comments

如果您正在使用.NET 3.5,我建议使用LINQ to XML...

XDocument doc = XDocument.Load(filename);
XElement insideLinks = doc.Root.Element("result").Element("inside_links");
foreach (XElement insideLink in insideLinks.Elements())
{
    string description = (string)insideLink.Element("description");
    string url = (string)insideLink.Element("url");
}

这还允许您使用内置的“查询”语法,这样您可以做如下的操作...

XDocument doc = XDocument.Load(filename);
XElement insideLinks = doc.Root.Element("result").Element("inside_links");
var allTitles = from XElement insideLink 
                in insideLinks.Elements("inside_link")
                select (string)insideLink.Element("title");

(根据评论进行了编辑)

0