[英]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.