无法使用C#从xml读取值/节点

Roxy'Pro:

我正在尝试从以下xml(先前是从FTP获取)中读取值:

<?xml version="1.0" encoding="utf-8"?>
<eventdata xmlns="http://www.demoweb.net/xml/eventdata" >
<site>
<sitelink>demotesting</sitelink>
<user>15101991</user>
<measurement>
 <nodelink>012019120312064500</nodelink>
 <containername>A1</containername>
 <time>2020-04-30T11:25:35</time>
 <value type="n_v_unitvalue">0.04</value>
 <value type="n_v_unitvalue_diff">0.040</value>
</measurement>
<measurement>
 <nodelink>012019120312064501</nodelink>
 <containername>A2</containername>
 <time>2020-04-30T11:25:35</time>
 <value type="n_v_unitvalue">0.0</value>
 <value type="n_v_unitvalue_diff">-0.001</value>
</measurement>
<measurement>
 <nodelink>012019120312064502</nodelink>
 <containername>A3</containername>
 <time>2020-04-30T11:25:34</time>
 <value type="n_v_unitvalue">0.0</value>
 <value type="n_v_unitvalue_diff">0.000</value>
</measurement>
</site>
<createdate>2020-04-30T11:25:35</createdate>
</eventdata>

在开始之前,文件已成功加载到内存中:)

如您所见,根节点是eventdata,并且site是包含所有数据的节点。所以基本上我需要循环所有measurement节点并获取数据。

我也在努力摆脱用户节点..这是到目前为止我已经尝试过的方法:

using (StreamReader xml_reader = new StreamReader(xml_response.GetResponseStream()))
{
    string xml = xml_reader.ReadToEnd();
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.LoadXml(xml);

    XmlNodeList mainFileContent = xmldoc.SelectNodes("eventdata");
    // XmlNodeList mainFileContent = xmldoc.SelectNodes("eventdata/site");
    XmlElement root = xmldoc.DocumentElement;

    if (mainFileContent != null)
    {
        foreach (XmlNode node in mainFileContent)
        {
            var user = node["user"].InnerText;   
        }
    }
}

我想念的是什么?

谢谢你们

干杯

帕维尔·阿尼克豪斯基(Pavel Anikhouski):

您的eventdata节点具有自己的xmlns声明,您应该使用正确地处理它XmlNamespaceManager并选择带有x:eventdata/x:siteXPath表达式的节点

var xmldoc = new XmlDocument();
xmldoc.LoadXml(xml);

var nsmgr = new XmlNamespaceManager(xmldoc.NameTable);
nsmgr.AddNamespace("x", xmldoc.DocumentElement.NamespaceURI);

var mainFileContent = xmldoc.SelectNodes("x:eventdata/x:site", nsmgr);
foreach (XmlNode node in mainFileContent)
{
    var user = node["user"]?.InnerText;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章