XML.InnerText Null

本文关键字:Null InnerText XML | 更新日期: 2023-09-27 18:33:42

我在XMLElement中加载了以下XML,如下所示:

<related_id>
  <Item>
    <classification>Component</classification>
    <id></id>
    <keyed_name>glass</keyed_name> <!-- I want to get this InnerText -->
  </Item>
</related_id>
<source_id>968C45A47942454DA9B34245A9F72A8C</source_id>
<itemtype>5E9C5A12CC58413A8670CF4003C57848</itemtype>

当我得到内部文本时:

string nameChildren = node.SelectSingleNode("/related_id/Item/keyed_name").InnerText;

字符串为空!

我做错了什么?

XML.InnerText Null

以双斜杠开头 XPath,并检查整个文档中的默认命名空间(xmlns属性)。

双斜杠表示related_id不一定是文件中的顶级元素(在您的示例中不是)。

如果您确认定义了默认命名空间,则需要将其反映在 xpath 中,如下所示:"//x:related_id/x:Item/x:keyed_name"并参考此答案。

但是,您的 XPath 仍然有点可疑,因为在特定级别上可能有多个具有相同名称的元素,并且您似乎无法安全地处理所有可能的组合。 双斜杠本身有些危险,除非 XML 非常简单。 通常最好用一个斜杠开始 XPath,并从上到下列出所有元素。

我认为您需要添加命名空间,即使是默认命名空间。尝试创建一个 XmlNamespaceManager 实例,并向其中添加默认命名空间(例如"ns")。之后,您的 xpath 应如下所示:

/ns:related_id/ns:Item/ns:keyed_name

我认为这里:在 C# 中使用带有默认命名空间的 Xpath 与您遇到的问题相同。