【发布时间】:2021-03-27 18:08:32
【问题描述】:
我是 XML 新手。我需要解析这个 XML 并从 -Field- 元素和 -name- 属性中读取值。
我需要来自 accountID、deviceID、odometerKM 的值
这是 XML:
<GTSResponse command="dbget" result="success">
<Record table="EventDataView" partial="true">
<Field name="accountID" primaryKey="true" alternateKeys="adtkey,driverkey">
<![CDATA[salesdemo]]>
</Field>
<Field name="deviceID" primaryKey="true" alternateKeys="adtkey">
<![CDATA[bubba_polaris]]>
</Field>
<Field name="timestamp" primaryKey="true" alternateKeys="adtkey,driverkey">1605919705</Field>
<Field name="statusCode" primaryKey="true">0xF010</Field>
<Field name="latitude">0.0</Field>
<Field name="longitude">0.0</Field>
<Field name="odometerKM">0.2566422</Field>
<Field name="odometerOffsetKM">0.0</Field>
</Record>
<Record table="EventDataView" partial="true">
<Field name="accountID" primaryKey="true" alternateKeys="adtkey,driverkey">
<![CDATA[salesdemo]]>
</Field>
<Field name="deviceID" primaryKey="true" alternateKeys="adtkey">
<![CDATA[bubba_polaris]]>
</Field>
<Field name="timestamp" primaryKey="true" alternateKeys="adtkey,driverkey">1605919705</Field>
<Field name="statusCode" primaryKey="true">0xF010</Field>
<Field name="latitude">0.0</Field>
<Field name="longitude">0.0</Field>
<Field name="odometerKM">0.23445323</Field>
<Field name="odometerOffsetKM">0.0</Field>
</Record>
</GTSResponse>
这是我尝试过的代码:
XDocument doc = XDocument.Parse(receivedResponse);
Dictionary<string, string> dataDictionary = new Dictionary<string, string>();
foreach (XElement element in doc.Descendants().Where(p => p.HasElements == false))
{
int keyInt = 0;
string keyName = element.Name.LocalName;
while (dataDictionary.ContainsKey(keyName))
{
keyName = element.Name.Namespace.ToString();
keyName = element.Name.LocalName + "_" + keyInt++;
}
dataDictionary.Add(keyName, element.Value);
}
foreach (var x in dataDictionary)
{
Console.WriteLine("keyName: " + x.Key + " value: " + x.Value);
}
当我运行它时,它会遍历所有 -Field- 元素,但它不使用 -name-。我需要查看 -name- 以便我知道我有什么价值。我将更新我的数据库,并需要按名称相应地循环和更新字段。
【问题讨论】:
-
您需要将元素替换为后代 From : .Elements("Field") To : .Descendants("Field")
-
谢谢 jdweng - 我会试试的。
-
你想在 while 循环中做什么?如果要更改值 dataDictionary[keyName] = "new value";
-
我正在遍历 XML 文件中的所有元素。我发布的 XML 仅用于一个记录。但是实际数据中有多个 Record 元素...我不明白您评论要更改的内容.....
标签: c# xml xml-parsing