我正在使用Linq to XML synatx解析大量XML文件,当我尝试访问顶级元素时一切正常
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);
答案 0 :(得分:0)
你可以改变:
element.Descendants("dd_DARBINIS_GRAFIKAS_SPEC").First()
到此:
element.Descendants("dd_DARBINIS_GRAFIKAS_SPEC").FirstOrDefault() ?? "-"
答案 1 :(得分: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
。如果不这样做,您将遇到{{1} }。)
以下是您发布的XML片段,其中包含上述代码的上下文:
NullReferenceException