这里我有以下XML数据:
< RepairOrderEvent> < EventType> Advisor - 修复工具< / EventType> < EventDateTime> 2019-01-07T11:18:38.8756279-06:00< / …
如果可以使用 XDocument 然后你可以这样做:
XDocument
var currentWorkfileDoc = XDocument.Load(memoConfigFile); var sum = (from item in currentWorkfileDoc.Elements("EventNotes") select Regex.Split(item.Value, @"\D+")[0]).Sum(x => int.Parse(x));
或尝试下面的代码 XmlDocument 如你所愿:
XmlDocument
XmlDocument currentWorkfileDoc = new XmlDocument(); currentWorkfileDoc.LoadXml(currentWorkfileXML); int sum = 0; XmlNodeList elemList = currentWorkfileDoc.GetElementsByTagName("EventNotes"); for (int i = 0; i < elemList.Count; i++) sum += int.Parse(Regex.Split(elemList[i].Value, @"\D+")[0]);
的 更新: 强>
我试过了 Regex 将查找所有数字作为字符串数组但数组的第一个索引是 "" 你应该把它作为第二个索引 Regex.Split(elemList[i].Value, @"\D+")[1] 。 如果在第一个之前可能有数字,则在另一边 score 你可以拆分元素基础的字符串 Score: 单词和 substring 第二个拆分索引到第一个 ; 喜欢:
Regex
""
Regex.Split(elemList[i].Value, @"\D+")[1]
score
Score:
substring
;
foreach (var element in currentWorkfileDoc1.Descendants("EventNotes")) { string[] strPart = element.Value.Split(new string[] { "Score:" }, StringSplitOptions.None); sum += int.Parse(strPart[1].Substring(0, strPart[1].IndexOf(';'))); }
注意: 您的 xml 文件没有 root 导致问题加载的元素 XmlDocument 我为你的XML尝试了第二个剪切代码,一切正常
xml
root
<root> <RepairOrderEvent> <EventType>Advisor - Repair Facility</EventType> <EventDateTime>2019-01-07T11:18:38.8756279-06:00</EventDateTime> <EventNotes>Weld-through primer is not included.; Rule Type: Estimate Line; Score: 1; Variance: 0.0; UniqueSequenceNum: 9</EventNotes> </RepairOrderEvent> </root>