我有一個XML,如下圖所示,我想讀取一個名為1526726702的節點。所以這個特定的節點集合片段,我有資料結構,以列和行的結構形式。 即列由<measTypes>標簽表示,行由<measResults>下的<measValue>表示。所以我有很多單元格,如'Local Cell ID=10', 'Local Cell ID=11', 'Local Cell ID=12' 等。現在我的目的是讀取1526726740和1526728300下的<measTypes>列,以獲得第一個單元格'Local Cell ID=10'的43.596和390824的值,像這樣我們有許多行的特定列。
XML SNIPPET
<?xml version="1.0" encoding="UTF-8"? >
<measCollecFile xmlns=" measCollec" xmlns。 xsi="http://www. w3.org/2001/XMLSchema-instance" xsi:schemaLocation="Schedule.xsd">
<fileHeader fileFormatVersion="V7。 2" testername="tea">
<fileSender elementType="SBT900"/span>/>
<measCollec beginTime="2021-01-24T00:00 04:00"/span>/>
</fileHeader>/span>
<measData>/span>
<managedElement userLabel="eelaBldg_474"/span>/>
<measInfo measInfoId="726702"/span>>
</measInfo>/span>
<measInfo measInfoId="1526"/span>>
</measInfo>/span>
<measInfo measInfoId="1526726702">/span>
< granPeriod duration="PT3600S"/span> endTime="2021-01-24T01: 00:00 04:00"/>
<repPeriod duration="PT3600S"/span>/>
<measTypes> 1526726737 1526726740 1526727483 1526728299 1526728300 1526728301 1526728302 1526728303 1526728304 1526728305 </measTypes>
<measValue measObjLdn="eelaBldg_474/Cell。 eNodeB功能名稱=eelaBldg_474,本地小區ID=10,小區名稱=GhaleelaBldg_A_F1U,eNodeB ID=956474,小區FDD TDD指示=CELL_TDD"/span>>
<measResults>41.699 43.596 9. 241 2461846 390824 27358 0 1263996 5282350 7509028 </measResults>
</measValue>/span>
<measValue measObjLdn="eelaBldg_474/Cell: eNodeB功能名稱=eelaBldg_474,本地小區ID=11,小區名稱=GhaleelaBldg_A_F1U,eNodeB ID=956474,小區FDD TDD指示=CELL_TDD">
<measResults>42.699 46.596 9. 241 2461846 390829 27358 0 1263996 5282350 7509028 </measResults>
</measValue>/span>
<measValue measObjLdn="eelaBldg_474/Cell: eNodeB功能名稱=eelaBldg_474,本地小區ID=12,小區名稱=GhaleelaBldg_A_F1U,eNodeB ID=956474,小區FDD TDD指示=CELL_TDD">
<measResults>43.699 49.596 9. 241 2461846 390826 27358 0 1263996 5282350 7509028 </measResults>
</measValue>/span>
</measInfo>/span>
</measData>/span>
</measCollecFile>/span>
我嘗試的代碼如下所示
using (XmlReader xr = XmlReader.Create(path))
{
xr.MoveToContent()。
while (xr.Read()
{
while (xr.NodeType == XmlNodeType.Element && xr.LocalName == " measInfo" && xr. GetAttribute("measInfoId"/span>) == "1526726702"/span>)
{
try 試一試
{
XElement pin = (XElement)XNode.ReadFrom(xr);
string earfcndl = Getvalue(pin, " measTypes");
//string t = pin.Element(" measTypes").Value;
var data = from atts in pin.Elements(" measInfo")
選擇 新
{
meas = (string)atts.Element(" measTypes")
};
string measTypes = data.First().meas。
}
catch (Exception ex)
{
}
}
}
}
uj5u.com熱心網友回復:
你的代碼有一個默認的命名空間xmlns="measCollec",所以使用下面的代碼,它使用一個字典
。using System;
using System.Collections.Generic;
using System.Text.Document; using System.Text.Document
使用System.Xml。
using System.Xml.Linq;
namespace ConsoleApplication181
{
class Program {
{
const string FILENAME = @"c: emp est.xml" ;
static void Main(string[] args)?
{
XDocument doc = XDocument.Load(FILENAME);
XElement measCollecFile = doc.Root;
XNamespace ns = measCollecFile.GetDefaultNamespace()。
Dictionary<string,XElement> measInfoDict = measCollecFile.Descendants(ns "masInfo")
.GroupBy(x => (string)x.Attribute("masInfoId"), y => y)
.ToDictionary(x => x.Key, y => y.FirstOrDefault())。
XElement m726702 = (XElement)measInfoDict["1526726702"/span>]。
int numberColumns = ((string)m726702.Descendants(ns "measResults") 。 FirstOrDefault()).Trim().Split(new char[] { ' '/span> }).Length;
string[] strcolumnNames = { "building", "cell", "function name", "本地小區ID", "小區名稱", "eNodeB ID", "小區FDD TDD指示" };
DataColumn[] strColumns = strcolumnNames.Select(x => new DataColumn(x, typeof(string)).ToArray()。
DataColumn[] columns = Enumerable.Range(0, numberColumns).Select((x, i) => new DataColumn("Col" (i 1) 。 ToString(), typeof(decimal)).ToArray()。
DataTable dt = new DataTable()。
dt.Columns.AddRange(strColumns);
dt.Columns.AddRange(columns)。
foreach (XElement measValue in m726702.Descendants(ns " measValue")
{
string measObjLdn = (string)measValue.Attribute("measObjLdn") 。
int firstSpace = measObjLdn.IndexOf(' ')。
string buildCell = measObjLdn.Substring(0, firstSpace) 。
string build = buildCell.Split(new char[] { '/'/span> }).FirstOrDefault()。
string cell = buildCell.Split(new char[] { ': ' }).LastOrDefault()。
string parameters = measObjLdn.Substring(firstSpace).Trim();
string[] parametersValues = parameters.Split(new char[] { ' , ' }) 。 Select(x => x.Substring(x.IndexOf("=") 1).Trim())。
parametersValues = (new string[] { build, cell }).Concat(引數Values).ToArray();
string values = ((string)measValue.Element(ns "measResults")).Trim()。
var splitValues = values.Split(new char[] { ' ' }) 。 Select(x => (object)decimal.Parse(x))。
dt.Rows.Add(parametersValues.Concat(splitValues).ToArray())。
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317259.html
標籤:
下一篇:使用JS腳本更改背景顏色或影像
