我试图从我从db通知接收的XElement中获取值。 xml结构如下:
<?xml version="1.0"?>
<root>
<inserted>
<row>
<CODI_AVERIA>22</CODI_AVERIA>
<NUMERO_LINIA>2</NUMERO_LINIA>
<DIA>2016-07-17T00:00:00</DIA>
<HORA>1899-12-30T10:26:15.790</HORA>
<CODI_USUARI>1</CODI_USUARI>
<ACCIO>0</ACCIO>
<CODI_PSEUDO>-1</CODI_PSEUDO>
</row>
</inserted>
</root>
这是我用来获取数据的方法,它返回一个空的List。
static void getAccio(XElement xml)
{
try
{
xml.Descendants("deleted").Remove();
var items = xml.Elements("row").Select(n => new
{
Codi_averia = n.Element("CODI_AVERIA").Value,
Numero_linia = n.Element("NUMERO_LINIA)").Value,
Accio = n.Element("ACCIO").Value
}).ToList();
}
catch (Exception e)
{
Console.Write(e.Message);
}
}
我试图将每个字段的值分开,但它不允许我像XElements那样将它们分开。
答案 0 :(得分:0)
使用.Descendants()
代替.Elements()
:
var items = xml.Descendants("row").Select(n => new
{
Codi_averia = n.Element("CODI_AVERIA").Value,
Numero_linia = n.Element("NUMERO_LINIA)").Value,
Accio = n.Element("ACCIO").Value
}).ToList();
.Elements
只找到那些直接后代的元素,即直接孩子。 - 我假设您的XElement
是inserted
部分的父级。
.Element
和.Descendants
see this question
如果您不想在所有内部元素中找到它们,请执行.Element("inserted").Elements("rows")
答案 1 :(得分:0)
您的文档没有名称为row
的根元素。相反,您需要先选择inserted
,然后枚举row
的{{1}}元素:
inserted
答案 2 :(得分:0)
在您的示例代码中("NUMERO_LINIA)")
因为附加引号和括号而错误。
这对我有用:
XDocument xd = XDocument.Load("XMLFile1.xml");
var lst = (from n in xd.Descendants("row")
select new
{
Codi_averia = n.Element("CODI_AVERIA").Value,
Numero_linia = n.Element("NUMERO_LINIA").Value,
Accio = n.Element("ACCIO").Value
}).ToList();
foreach (var item in lst)
Console.WriteLine(string.Format("{0}{1}{2}", item.Codi_averia, item.Numero_linia, item.Accio));