我正在研究 Excel 工作表的 Open XML 文档格式。
var nodeList = WorksheetXml.SelectNodes(@"//c[child::f]");
它应该返回带有公式的所有行,但它不返回任何内容。 Oxygen Editor 上的相同 xml,当应用相同的 xpath 表达式时,会返回所有这些内容。
我正在复制 WorksheetXml 内部 xml 以确保内容相同...您知道为什么 C# 没有按预期方式工作吗?
编辑:命名空间问题
我把这个:
var manager = new XmlNamespaceManager(WorksheetXml.NameTable);
manager.AddNamespace(string.Empty, @"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
manager.AddNamespace("r", @"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
var nodeList = WorksheetXml.SelectNodes(@"//c[child::f]", manager);
它不起作用,我认为这不是命名空间问题。
最佳答案
Oxygen Editor 是否可能以不同的方式处理命名空间?我的猜测是 c
元素位于命名空间中,但您没有指定一个。
参见this very similar question示例代码 - 如果这不是问题,请发布更多详细信息。
编辑:您发布的代码仍然没有使用 XPath 中的命名空间。试试这个:
var manager = new XmlNamespaceManager(WorksheetXml.NameTable);
manager.AddNamespace("n",
"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
manager.AddNamespace("r",
"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
var nodeList = WorksheetXml.SelectNodes("//n:c[child::n:f]", manager);
(我不知道 c
和 f
元素应该位于哪个命名空间 - 适当调整。)
(请注意,当没有反斜杠且字符串位于一行时,无需使用逐字字符串文字。)
关于c# - 为什么 XPath 表达式在 C# 中不返回任何结果,但在 C# 之外却返回任何结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100232/