【发布时间】:2017-10-02 15:23:57
【问题描述】:
我正在解析一个包含 <es:qrxlev> 节点的 XML 文件。有时这些节点直接在<xn:attributes> 节点中找到,有时在更深的位置找到它们,例如在<es:pciConflictCell> 和<es:pciDictictCell> 节点中。
我直接在<xn:attributes>节点中追<es:qrxlev>节点的值。
我的 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:qrxlev>3</es:qrxlev>
</es:pciConflictCell>
<es:pciConflictCell>
<es:enbId>66111</es:enbId>
<es:qrxlev>7</es:qrxlev>
</es:pciConflictCell>
<es:pciDictictCell>
<es:enbId>66111</es:enbId>
<es:qrxlev>8</es:qrxlev>
</es:pciDictictCell>
<es:pdcchLaGinrMargin>100</es:pdcchLaGinrMargin>
<es:lbEUtranAcceptOffloadThreshold>50</es:lbEUtranAcceptOffloadThreshold>
<es:pdcchCfiMode>5</es:pdcchCfiMode>
<es:qrxlev>10</es:qrxlev>
<es:zzzTemporary21>-2000000000</es:zzzTemporary21>
</xn:attributes>
</xn:VsDataContainer>
我现在使用的代码是:
List<XElement> vsDataEUtranCellFDD = vsDataContainers.Where(x => x.Descendants().Where(a => (a.Name.LocalName == "vsDataType") && ((string)a == "vsDataEUtranCellFDD")).Any()).ToList();
List<CellName> cells = vsDataEUtranCellFDD.Select(x => new CellName()
{
if (vsDataEUtranCellFDD.Any())
{
List<CellName> cells = vsDataEUtranCellFDD
.Select(x => new CellName()
{
qrxlev= (int)x.Descendants()
.Where(a => a.Name.LocalName == "qrxlev")
.FirstOrDefault()
};
}
此代码的问题在于它返回 all <es:qrxlev> 节点值,而不仅仅是属性节点中的值。我怎样才能只获得我想要的特定值而不是所有值?
【问题讨论】: