【问题标题】:XML Node Attribute returning as NULL when populated?填充时 XML 节点属性返回为 NULL?
【发布时间】:2018-10-19 16:44:51
【问题描述】:

我有一个 XML 文档,我正在提取一个特定的节点及其所有属性。在调试模式下,我可以看到我正在获取特定的节点及其所有属性。但是,当我尝试获取属性值时,它找不到它并返回一个 NULL 值。我已经进行了一些搜索并查看了一些示例,据我所知,我应该获得价值,但我没有,而且我看不出我做错了什么。

我正在尝试获取 StartTime 值。

这是返回的 XML。

在这里,您可以在调试中看到,并且使用文本可视化器,值应该在那里。

我正在尝试的代码。

XmlNodeList nodes = xmlDoc.GetElementsByTagName("PlannedAbsences");
if (nodes != null && nodes.Count > 0)
{
    foreach (XmlNode node in nodes)
    {

        if (node.Attributes != null)
        {
            var nameAttribute = node.Attributes["StartTime"];
            if (nameAttribute != null)
            {
                //var startDate = nameAttribute.Value;
            }
        }
    }
}

【问题讨论】:

  • 您正在遍历文档中的所有 PlannedAbsences 节点。 StartTime 属性不在 PlannedAbsences 上,它在 Absence 上。

标签: c# xml


【解决方案1】:

使用 System.Xml.Linq 命名空间中包含的 XDocument 类,从 PlannedAbsences 父级中获取子元素,然后遍历子元素以检索所需属性的值。

var xmlDoc = XDocument.Load(@"path to xml file")
var absences = xmlDoc.Element("PlannedAbsences")?.Elements("Absence");
foreach (var item in absences)
{
    var xElement = item.Attribute("StartTime").Value;
    Console.WriteLine(xElement);
}

【讨论】:

  • 我得到“XmlDocument”不包含“元素”的定义。
  • 检查您是否添加了 System.Xml.Linq 命名空间。 xmlDoc 变量应该是 XDocument 类型。我将编辑我的答案来解决这个问题。
  • 我添加了 System.Xml.Linq 命名空间并尝试了更新的 XDocument 代码,但我仍然得到相同的错误“XmlDocument 不包含元素的定义”。我正在尝试筛选代码另一个项目应该调用相同的终点并做类似的事情,看看我是否错过了什么。
  • 在变量声明 XDocument.Load 到 System.Xml.Linq.XDocument.Load 中使用整个命名空间可能值得一试。可能有另一个 XDocument 类型的引用。
  • 答案建议使用XDocument,而不是XmlDocument。它们是不同的类。
猜你喜欢
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 2014-11-02
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多