我有一个XML文件,看起来像:
<results>
<result>
<title>Welcome+to+The+JASON+Project%21</title>
<url>http%3A%2F%2Fwww.jason.org%2F</url>
<domain />
<inside_links>
<inside_link>
<description>News</description>
<url>http%3A%2F%2Fwww.jason.org%2FPublic%2FNews%2FNews.aspx</url>
</inside_link>
<inside_link>
<description>register</description>
<url>http%3A%2F%2Fwww.jason.org%2Fpublic%2Fregistration%2Fregistration.aspx</url>
</inside_link>
<inside_link>
<description>Argonauts</description>
<url>http%3A%2F%2Fwww.jason.org%2FPublic%2FArgonauts%2FArgonauts.aspx</url>
</inside_link>
<inside_link>
<description>Curriculum</description>
<url>http%3A%2F%2Fwww.jason.org%2FPublic%2FCurriculum%2FCurriculum.aspx</url>
</inside_link>
<inside_link>
<description>Credits</description>
<url>http%3A%2F%2Fwww.jason.org%2Fpublic%2FMisc%2FCredits.aspx</url>
</inside_link>
</inside_links>
<inside_keywords>National+Science+Education+Standards, National+Geographic+Society, Physical+Science, Professional+Development, Earth+Science</inside_keywords>
</result>
</results>
Run Code Online (Sandbox Code Playgroud)
......我对如何阅读而感到困惑.我只想将标题,描述和URL分成不同的字符串.就像是:
foreach line in lines
string title = gettitle;
string description = getdescription;
string url = geturl;
Run Code Online (Sandbox Code Playgroud)
...我已经阅读了很多教程,但所有这些教程似乎与我需要做的事情无关......有人可以帮我解决这个问题吗?
如果您使用的是.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");
}
Run Code Online (Sandbox Code Playgroud)
这也允许你使用内置的"查询"语法,所以你可以做这样的事情......
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");
Run Code Online (Sandbox Code Playgroud)
(根据评论编辑)
要扩展LINQ to XML建议,可以使用select子句创建对象以表示已解析的链接:
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("<a href=\"{0}\">{1}</a>", l.Url, l.Description);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,links将是具有带有Description和Url属性的匿名类型的对象序列,并且Url已解码.这foreach会显示如下:
<a href="http://www.jason.org/Public/News/News.aspx">News</a>
<a href="http://www.jason.org/public/registration/registration.aspx">register</a>
...
Run Code Online (Sandbox Code Playgroud)