[英]Searching for values in multiple child node using XML and C#
嘗試使用 xElement 在多個子節點中搜索時遇到問題。 我的示例 XML 文件:
<VIDEOS> <VIDEO> <ID>1</ID> <NAME>AAA</NAME> <ACTORS> <ACTOR> <NAME>AAA</NAME> <URL>www.aaa.com</URL> </ACTOR> <ACTOR> <NAME>BBB</NAME> <URL>www.bbb.com</URL> </ACTOR> <ACTOR> <NAME>CCC</NAME> <URL>www.ccc.com</URL> </ACTOR> </ACTORS> </VIDEO> <VIDEO> <ID>2</ID> <NAME>BBB</NAME> <ACTORS> <ACTOR> <NAME>AAA</NAME> <URL>www.aaa.com</URL> </ACTOR> <ACTOR> <NAME>DDD</NAME> <URL>www.ddd.com</URL> </ACTOR> <ACTOR> <NAME>EEE</NAME> <URL>www.eee.com</URL> </ACTOR> </ACTORS> </VIDEO> <VIDEO> <ID>3</ID> <NAME>CCC</NAME> <ACTORS> <ACTOR> <NAME>CCC</NAME> <URL>www.ccc.com</URL> </ACTOR> <ACTOR> <NAME>BBB</NAME> <URL>www.bbb.com</URL> </ACTOR> <ACTOR> <NAME>EEE</NAME> <URL>www.eee.com</URL> </ACTOR> </ACTORS> </VIDEO> </VIDEOS>
我嘗試使用:
var videos = from element in xDocument.Descendants("VIDEO").
Descendants("ACTORS").
Descendants("ACTOR").
Where(e => e.Element("NAME").Value.ToLower().Contains(searchText.ToLower()))
select new
{
Id = element.Element("ID").Value,
Name = element.Element("NAME").Value,
Actors = element.Element("ACTORS").Value
};
使用以下作品,但我需要搜索所有演員姓名並從節點獲取所有視頻詳細信息。 請幫忙!
var videos = from element in xDocument.Descendants("VIDEO").
Where(e => e.Element("ACTORS").Value.ToLower().Contains(searchText.ToLower()))
select new
{
Id = element.Element("ID").Value,
Name = element.Element("NAME").Value,
Actors = element.Element("ACTORS").Value
};
試試這個代碼,
static void Main(string[] args)
{
string searchText = "eee";
XDocument xDocument = XDocument.Load(@"test.xml");
var videos = from element in xDocument.Descendants("VIDEO").
Where(e => e.Descendants("ACTORS").
Descendants("ACTOR").Any(actor => actor.Element("NAME").Value.ToLower().Contains(searchText.ToLower())))
select new
{
Id = element.Element("ID").Value,
Name = element.Element("NAME").Value,
Actors = element.Element("ACTORS").Descendants("ACTOR").Select(y => new
{
name = y.Element("NAME").Value,
url = y.Element("URL").Value
})
};
}
試試下面的代碼。 如果您想要單個列表,則需要添加到 SelectMany() 結尾。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication82
{
class Program
{
static void Main(string[] args)
{
string xml =
"<VIDEOS>" +
"<VIDEO>" +
"<ID>1</ID>" +
"<NAME>AAA</NAME>" +
"<ACTORS>" +
"<ACTOR>" +
"<NAME>AAA</NAME>" +
"<URL>www.aaa.com</URL>" +
"</ACTOR>" +
"<ACTOR>" +
"<NAME>BBB</NAME>" +
"<URL>www.bbb.com</URL>" +
"</ACTOR>" +
"<ACTOR>" +
"<NAME>CCC</NAME>" +
"<URL>www.ccc.com</URL>" +
"</ACTOR>" +
"</ACTORS>" +
"</VIDEO>" +
"<VIDEO>" +
"<ID>2</ID>" +
"<NAME>BBB</NAME>" +
"<ACTORS>" +
"<ACTOR>" +
"<NAME>AAA</NAME>" +
"<URL>www.aaa.com</URL>" +
"</ACTOR>" +
"<ACTOR>" +
"<NAME>DDD</NAME>" +
"<URL>www.ddd.com</URL>" +
"</ACTOR>" +
"<ACTOR>" +
"<NAME>EEE</NAME>" +
"<URL>www.eee.com</URL>" +
"</ACTOR>" +
"</ACTORS>" +
"</VIDEO>" +
"<VIDEO>" +
"<ID>3</ID>" +
"<NAME>CCC</NAME>" +
"<ACTORS>" +
"<ACTOR>" +
"<NAME>CCC</NAME>" +
"<URL>www.ccc.com</URL>" +
"</ACTOR>" +
"<ACTOR>" +
"<NAME>BBB</NAME>" +
"<URL>www.bbb.com</URL>" +
"</ACTOR>" +
"<ACTOR>" +
"<NAME>EEE</NAME>" +
"<URL>www.eee.com</URL>" +
"</ACTOR>" +
"</ACTORS>" +
"</VIDEO>" +
"</VIDEOS>";
XDocument doc = XDocument.Parse(xml);
var results = doc.Descendants("VIDEO").Select(x => new {
id = (int)x.Element("ID"),
name = (string)x.Element("NAME"),
actors = x.Descendants("ACTOR").Select(y => new {
name = (string)y.Element("NAME"),
url = (string)y.Element("URL")
}).ToList()
}).ToList();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.