0

我在 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;

字符串为空!

我究竟做错了什么?

4

2 回答 2

2

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

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

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

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

于 2012-05-09T15:09:25.353 回答
1

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

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

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

于 2012-05-09T15:18:59.807 回答