【发布时间】:2017-09-30 19:02:17
【问题描述】:
我有一个如下所示的 xml 文件,它是大 xml 文件的一小部分
<?xml version="1.0" encoding="utf-8" ?>
<xn:VsDataContainer id=test">
<xn:attributes>
<xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType>
<es:crsGain>0</es:crsGain>
<es:pciConflictCell>
<es:enbId>66111</es:enbId>
<es:cellId>3</es:cellId>
</es:pciConflictCell>
<es:pdcchLaGinrMargin>100</es:pdcchLaGinrMargin>
<es:lbEUtranAcceptOffloadThreshold>50</es:lbEUtranAcceptOffloadThreshold>
<es:pdcchCfiMode>5</es:pdcchCfiMode>
<es:cellId>0</es:cellId>
<es:zzzTemporary21>-2000000000</es:zzzTemporary21>
</xn:attributes>
</xn:VsDataContainer>
我正在使用以下代码来获取crsGain 和cellId 的值。但是cellIdiam 没有得到想要的值。即如果前一个节点是pdcchCfiMode,我需要cellId。所以在这里我应该将值设为 0,但我得到 3,这是序列中的第一个。如何解决这个问题。我使用的代码片段是
if (vsDataEUtranCellFDD.Any()) {
List<CellName> cells = vsDataEUtranCellFDD.Select(x => new CellName() {
cellId= (int)x.Descendants().Where(a => a.Name.LocalName == "cellId").FirstOrDefault(),
crsGain = (int)x.Descendants().Where(a => a.Name.LocalName == "crsGain").FirstOrDefault(),
编辑
这个cellid也可以发生在中间,唯一的区别是前一个节点是pdcchCfiMode
【问题讨论】:
-
这个cellid也可以发生在中间,唯一的区别是前一个节点是pdcchCfiMode
-
你能保证每次
pdcchCfiMode之后,cellid总是发生吗? -
是的 100% 保证
-
好的。检查我的答案。希望对您有所帮助。
标签: c# xml linq linq-to-xml