的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

回到顶部