【问题标题】:Cannot Parse a Xmlement with Xpath Correctly无法使用 Xpath 正确解析 Xmlement
【发布时间】:2025-11-28 19:25:01
【问题描述】:

我有一个 web 服务,它返回如下所示的 xmlement

<Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Type>C</Type>
   <AppDate>2012-05-01T00:00:00</AppDate>
   <Applicants>
      <ID>1234</ID>
   </Applicants>
   <Applicants>
      <ID>0</ID>
   </Applicants>
   <Status>O</Status>
</Application>

在我的客户端 我有这样的代码

XmlElement root = proxy.CallWebservice();

XmlNodeList nodeList;
nodeList = root.SelectNodes("/Application/Applicants");
foreach (XmlNode applicants in nodeList)
{
    Console.WriteLine(applicants.InnerXml);
}

问题:我无法输出任何内容。

但是

如果我这样做

File.WriteAllText(@"d:\output.xml", root.OuterXml.ToString());
XmlDocument doc = new XmlDocument();
doc.Load(@"d:\output.xml");
XmlElement root = doc.DocumentElement;

XmlNodeList nodeList;
nodeList = root.SelectNodes("/Application/Applicants");
foreach (XmlNode title in nodeList)
{
    Console.WriteLine(title.InnerXml);
}

它工作正常,我不想写入文件来读取节点。我做错了什么?

【问题讨论】:

  • 我只是想知道这是否是因为您将文件加载到 XmlDocument 中,而您只是将 XmlElement 用于非工作示例。
  • XPath 问题通常与命名空间有关。如果命名空间“关闭”,则一切正常,但如果它们“打开”,它们将失败,直到您向 xml 处理器注册命名空间。您可以尝试删除 'xmlns:xsi="w3.org/2001/XMLSchema-instance"' 属性吗?这将提供线索。
  • 一个猜测,但我怀疑 Proxy.WebService 和 Document.DocumentElement 不是同一个节点,快速调试应该告诉你。

标签: c# xml web-services xml-parsing


【解决方案1】:

我不得不使用 XmlNodeList nodeList;

nodeList = root.SelectNodes("Applicants");

因为我的根是应用程序

【讨论】: