还有一个类似的问题,但似乎解决方案在我的情况下没有奏效:Weirdness with XDocument, XPath and namespaces

下面是我正在使用的XML:

<?xml version="1.0" encoding="utf-8"?>
<Report Id="ID1" Type="Demo Report" Created="2011-01-01T01:01:01+11:00" Culture="en" xmlns="http://demo.com/2011/demo-schema">
    <ReportInfo>
        <Name>Demo Report</Name>
        <CreatedBy>Unit Test</CreatedBy>
    </ReportInfo>
</Report>

下面是代码,我认为它应该工作,但它没有...

XDocument xdoc = XDocument.Load(@"C:\SampleXML.xml");
XmlNamespaceManager xnm = new XmlNamespaceManager(new NameTable()); 
xnm.AddNamespace(String.Empty, "http://demo.com/2011/demo-schema");
Console.WriteLine(xdoc.XPathSelectElement("/Report/ReportInfo/Name", xnm) == null);

有人有什么 idea 吗?

推荐答案

如果您有XDocument,那么使用LINQ to XML就更容易了:

var document = XDocument.Load(fileName);
var name = document.Descendants(XName.Get("Name", @"http://demo.com/2011/demo-schema")).First().Value;

如果您确定XPath是您唯一需要的解决方案:

using System.Xml.XPath;

var document = XDocument.Load(fileName);
var namespaceManager = new XmlNamespaceManager(new NameTable());
namespaceManager.AddNamespace("empty", "http://demo.com/2011/demo-schema");
var name = document.XPathSelectElement("/empty:Report/empty:ReportInfo/empty:Name", namespaceManager).Value;

.net相关问答推荐

Powershell机器令牌组

从容器化客户端应用程序连接到 OPC-UA 服务器

无法对.NET MAUI类库进行单元测试

从删除项目时重新索引的列表中删除项目的最佳算法是什么?

如何正确使用await using语法?

从 byte[] 创建 zip 文件

是否可以像 WebView 一样在 Windows 窗体中嵌入 Gecko 或 Webkit?

通用枚举到int的C#非装箱转换?

处理序列没有元素异常

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

.net:System.Web.Mail 与 System.Net.Mail

为什么 .NET 中不需要 Maven?

将接收到的对象转换为 List 或 IEnumerable

寻找 .NET 的命令行参数解析器

检索字典值最佳实践

List 和 IEnumerable 的实际区别

是否有可用的 WPF 备忘单?

为什么发布和调试模式下的代码行为不同?

string.Empty vs null.你用哪一个?

Guid.Parse() 或 new Guid() - 有什么区别?