【发布时间】:2017-05-24 11:21:47
【问题描述】:
如 xml 文件元素有相同和不同的节点,在相同的元素中,A 和 B 是默认的,如何根据各自的元素获取所有节点的子节点值
是否可以为它创建一个单独的方法,然后根据类型进行检查,然后获取子节点值?
Xml 文件:
<?xml version="1.0" encoding="utf-8" ?>
<File>
<Record>
<Data>
<Type>A</Type>
<office>
<Road>
<code> plot 309</code>
</Road>
</office>
<Area>
<AreaId>Pune</AreaId>
</Area>
</Data>
<Data>
<Type>B</Type>
<office>
<Road>
<code> plot 309</code>
</Road>
</office>
<Area>
<AreaId>A50</AreaId>
<AreaName>Pune</AreaName>
<AreaDetails>Pune India</AreaDetails>
</Area>
</Data>
</Record>
<Record>
<Data>
<Type>A</Type>
<office>
<Road>
<code> plot 400</code>
</Road>
</office>
<Area>
<AreaId>Mumbai</AreaId>
</Area>
</Data>
<Data>
<Type>B</Type>
<office>
<Road>
<code> plot 400</code>
</Road>
</office>
<Area>
<AreaId>A70</AreaId>
<AreaName>Mumbai</AreaName>
<AreaDetails>Mumbai-India</AreaDetails>
</Area>
</Data>
</Record>
</File>
C#代码:
XDocument xdocTest = XDocument.Load(@"E:xml\XMLFile1.xml");
var testRecords = (from root in xdocTest.Descendants("File")
from Record in root.Elements("Record")
select new
{
typeA = (Record.Elements("Data").Elements("Type").Any() ==true) ? Record.Element("Data").Element("Type").Value: string.Empty,
typeB = (Record.Elements("Data").Elements("Type").Any() == true) ? Record.Element("Data").Element("Type").Value : string.Empty
// Remaining child node
}).ToList();
【问题讨论】:
-
这样使用好不好: typeA = (Record.Elements("Data").First().Elements("Type").Any() ==true) ? Record.Elements("Data").First().Element("Type").Value: string.Empty, typeB = (Record.Elements("Data").Last().Elements("Type").Any () == 真) ? Record.Elements("Data").Last().Element("Type").Value : string.Empty