linq根据条件查询XML文件,查询后如何赋值?
没怎么接触过linq......xml文件格式:
<?xml version="1.0"?>
<channel>
<item>
<Id>2</Id>
<names>A</names>
</item>
<item>
<Id>3</Id>
<names>B</names>
</item>
</channel>
</xml>
XML LINQ select String --------------------编程问答-------------------- foreach(XElement el in Yl)
XElement xe = XElement.Load("YlClass.xml");//载入文件
IEnumerable<XElement> Yl = from e in xe.Element("item")
where e.Attribute("names").Value == Str1//Str1查询条件
select e;//根据names为查询条件,查出Id
string Id = //满足条件的查询结果,这个怎么写?
Id += el.Attribute("Id").Value; --------------------编程问答-------------------- 或
--------------------编程问答-------------------- 根据NAME标签只能查到一个ID还是多个? --------------------编程问答--------------------
XElement xe = XElement.Load("YlClass.xml");//载入文件
var res= (from e in xe.Element("item")
where e.Attribute("names").Value == Str1//Str1查询条件
select new {Id=e.Attribute("Id").Value}).ToArray();//根据names为查询条件,查出Id
string[] Ids = (from e in xe.Descendants("item")--------------------编程问答-------------------- var query= xe.Elements().Where(p => p.Element("names").Value == Str1).Select(p=>p.Element("Id").Value);多个
where e.Attribute("names").Value == Str1
select e.Attribute("Id").Value).ToArray();
var query= xe.Elements().FirstOrDefault(p => p.Element("names").Value == Str1).Attribute("Id").Value;单个 --------------------编程问答-------------------- var query= xe.Elements().Where(p => p.Element("names").Value == Str1).Select(p=>p.Element("Id").Value);多个
var query= xe.Elements().FirstOrDefault(p => p.Element("names").Value == Str1).Attribute("Id").Value;单个
+1 --------------------编程问答--------------------
string[] Ids = (from e in xe.Descendants("item")
where e.Attribute("names").Value == Str1
select e.Attribute("Id").Value).ToArray();
string Id = Ids.ToString();
//MessageBox.Show(Id); //没Show出来,没反应。
MessageBox.Show("dao");//代码执行没有到这里。
楼上的几位的方法都试过了,也是同样的情况,这是什么原因?
--------------------编程问答-------------------- string Id = Ids.ToString();
=====
你这句话是什么个意思? 直接将数组付值给string?
应该这样吧:
string Id = String.Join(",",Ids); --------------------编程问答-------------------- 版主,也一样,程序不到这里!Show不出来 --------------------编程问答-------------------- 要么帖出异常信息,要么帖出上下文方法
不然神也帮不了你
如果我这个代码是写在事件里的,就将 e换成别的字母:
string[] Ids = (from x in xe.Descendants("item")
where x.Attribute("names").Value == Str1
select x.Attribute("Id").Value).ToArray(); --------------------编程问答--------------------
--------------------编程问答--------------------
string Str1 = "A";
XElement xe = XElement.Load("YlClass.xml");
string[] Ids = (from c in xe.Descendants("item")
where c.Attribute("typenames").Value == Str15
select c.Attribute("Id").Value).ToArray();
string Id = String.Join(",", Ids);
MessageBox.Show(Str1);//Show不出来,程序没到这里
MessageBox.Show(Id);//Show不出来,程序没到这里
//如果把那个Linq查询代码给注释掉,MessageBox.Show(Str1);//Show出来的
--------------------编程问答-------------------- 程序编译正常通过,没有任何错误信息。 --------------------编程问答--------------------
string Id = String.Join(",", Ids);//把这行设为断点后,程序没运行到这里。
前面是不是有if分支,条件没满足啊 --------------------编程问答-------------------- 没有If语句呀。。。。 --------------------编程问答--------------------
--------------------编程问答--------------------
string Str1 = "A";
XElement xe = XElement.Load("YlClass.xml");
string[] Ids = (from c in xe.Descendants("item")//这里改为XML文件中的:channel
where c.Attribute("typenames").Value == Str15
select c.Attribute("Id").Value).ToArray();
string Id = String.Join(",", Ids);
MessageBox.Show(Id);//Show出来了,但是为空值!
--------------------编程问答-------------------- LINQ TO XML
string Str1 = "A";
XElement xe = XElement.Load("D:\\1.xml");
string[] Ids = (from c in xe.Elements("item")
where c.Element("typenames").Value == Str1
select c.Element("Id").Value).ToArray();
string Id = String.Join(",", Ids);
参考http://blog.csdn.net/chinajiyong/article/details/7485019 --------------------编程问答--------------------
哥哥,where c.Element("typenames").Value == Str1
Element没有这个Value的方法,好不好? --------------------编程问答-------------------- 不会哦。
--------------------编程问答--------------------
--------------------编程问答-------------------- string[] Idss = (from d in xes.Elements("item") where d.Element("names").Value == Str1 && d.Element("corpname").Value == Str2 //根据获得到的ClassId和大类名称查询 select new
XElement xe = XElement.Load("YlClass.xml");
string[] Ids = (from c in xe.Elements("item")
where c.Element("typenames").Value == Str1
select c.Element("Id").Value).ToArray();
string Id = String.Join(",", Ids);
string SmallXml = string.Format("xml/Mark{0}.xml", Id);//加载新的文件查找下一级
XElement xes = XElement.Load(SmallXml);//加载成功。
string[] Idss = (from d in xes.Elements("item")
where d.Element("names").Value == Str1 && d.Element("corpname").Value == Str2 //根据获得到的ClassId和大类名称查询
select d.Element("Id").Value).ToArray();//这里需要查询第二个XML文件中的ID,names,corpId,corpname,这个四个字段内容,应该怎么写?
{
d.Element("Id").Value,
d.Element("names").Value,
d.Element("corpId").Value,
d.Element("corpname").Value
}).ToArray();//这里需要查询第二个XML文件中的ID,names,corpId,corpname --------------------编程问答-------------------- d.Element("names").Value,
d.Element("corpId").Value,
d.Element("corpname").Value
这里提示:匿名类型不能具有名称相同的属性 。
还有我如何赋值 ?
string names = ?(d.Element("names").Value的值) --------------------编程问答-------------------- 搞不定,提示:匿名类型不能具有名称相同的属性 。
--------------------编程问答-------------------- 除 --------------------编程问答--------------------
var Idss = from d in xes.Elements("item")
where d.Element("names").Value == Str17.Trim() && d.Element("corpname").Value == Str18.Trim()
// select d.Element("Id").Value).ToArray();
select new
{
Id = d.Element("Id").Value,
names = d.Element("names").Value,
corpid = d.Element("corpid").Value,
corpname = d.Element("corpname").Value
};
运行通过,但是select new处设置断点后,无效。 另外,我如何取出里面的值:Id,names,coprid,corpname ?
--------------------编程问答-------------------- select new处设置断点后,无效?什么意思??
foreache(var q in Idss)
{
//q.Id,q.names
}
--------------------编程问答-------------------- 版主呢,版主呢,求救,求救啊。。。。 --------------------编程问答--------------------
哥哥,你终于出现了,在你消失的日子里,我吃不下,睡不好,喝不了,日也想,夜也思。骚年,你终于出现了。
这句话的意思是程序,直接约过这段代码,直接处理异常了。 --------------------编程问答--------------------
那就是抛异常呢??什么异常?? --------------------编程问答-------------------- 不清楚,可能执行到这里,无效,直接越过了。当时我怕程序出现异常导致崩溃,我另外加了个异常处理方法。
问题已经搞定了,谢谢骚年。给分结贴。
我也不知道是怎么解决的,莫名其妙的,一运行,好了。
补充:.NET技术 , C#