的LINQ to XML动态XML Decendants
我解析了很多使用LINQ to XML synatx XML文件,一切正常,当我尝试访问顶级元素的LINQ to XML动态XML Decendants
var indexroot = (from element in prodcutDocument.Root.Descendants("indexroot") select new
{
model = (string)element.Element("MODEL"),
}).FirstOrDefault()
当我需要访问下出现的问题该文件我试过的级别孩子的:
var indexroot = (from element in prodcutDocument.Root.Descendants("indexroot") select new
{
ddName = (string)element.Descendants("DD_NAME").Elements("name").First();
}).FirstOrDefault()
和
var indexroot = (from element in prodcutDocument.Root.Descendants("indexroot").Descendants("DD_NAME") select new
{
ddName = (string)element.Element("name")
}).FirstOrDefault();
可悲的是没有任何的作品,我也得到同样的错误“序列不包含元素”。还有一件事情,XML文档有时包含这些标签,有时候并不足以处理这种情况。
var indexroot = (from element in prodcutDocument.Root.Descendants("indexroot").Descendants("DD_NAME") select new
{
ddName = (string)element.Element("name") ?? "-"
}).FirstOrDefault();
编辑: 我不认为是可能的粘贴XML,这将是简单的短版,所以这里的完整版:http://pastebin.com/uDkP3rnR和代码示例:
XDocument prodcutDocument = XDocument.Load(this.ServerPATHData + file); var indexroot = (from element in prodcutDocument.Root.Descendants("indexroot")
select new
{
modelis = (string)element.Element("MODELIS"),
T2918_0 = (string)element.Descendants("dd_DARBINIS_GRAFIKAS_SPEC").First()
}).FirstOrDefault();
writeTxt.WriteLine("modelis: " + indexroot.modelis);
writeTxt.WriteLine("T2979_0" + indexroot.T2918_0);
回答:
在检查您在PasteBin上发布的示例XML时,在我看来,您提到的元素只出现一次。要访问它们,你可以按照如下简单地指定到每一个路径:
XElement indexroot = document.Root.Element("indexroot"); XElement modelis = indexroot.Element("MODELIS");
XElement dd_dgs = indexroot.Element("dd_DARBINIS_GRAFIKAS_SPEC");
XElement voltageuv = dd_dgs.Element("VoltageUV");
string t2979_0 = (string)voltageuv.Element("T2979_0");
string t2861_60 = (string)voltageuv.Element("T2861_60");
string t2757_121 = (string)voltageuv.Element("T2757_121");
(请注意,您可能需要检查null
如果有机会,任何你正在试图访问可能不是元素。目前没有这样做,你会遇到一个NullReferenceException
)
这里是你发布给上下文上面的代码中的XML的一个片段:
<?xml version='1.0' encoding='UTF-8' standalone='no'?> <PDB>
<indexroot>
<ed_BENDRA_MAKS_SUV_GALIA>1.45</ed_BENDRA_MAKS_SUV_GALIA>
<ed_BENDRA_MAKS_SROVE>6.48</ed_BENDRA_MAKS_SROVE>
<TIPAS>1</TIPAS>
<MODELIS>RIS 2500 HW EC 3.0</MODELIS>
<dd_DARBINIS_GRAFIKAS_SPEC>
<VoltageUV>
<T2979_0>229,42</T2979_0>
<T2861_60>227,98</T2861_60>
<T2757_121>228,97</T2757_121>
</VoltageUV>
<CurrentIA>
<T2979_0>2,56</T2979_0>
<T2861_60>2,63</T2861_60>
<T2757_121>2,72</T2757_121>
</CurrentIA>
</dd_DARBINIS_GRAFIKAS_SPEC>
</indexroot>
</PDB>
回答:
你可以变化:
element.Descendants("dd_DARBINIS_GRAFIKAS_SPEC").First()
这样:
element.Descendants("dd_DARBINIS_GRAFIKAS_SPEC").FirstOrDefault() ?? "-"
以上是 的LINQ to XML动态XML Decendants 的全部内容, 来源链接: utcz.com/qa/262589.html