我最近开始在c#中学习xml,xpath,xmldocuemtn。
我有一个如下所示的xml ..namespaces让我很困惑
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Pricing">
</Worksheet>
<Worksheet ss:Name="Order">
</Worksheet>
</Workbook>
这是我的c#代码..
XmlDocument doc = new XmlDocument();
doc.Load(ExcelFilePath);
您能告诉我如何使用ss获取Worksheet elemet:名称属性=&#39;定价&#39;
答案 0 :(得分:1)
您必须使用XmlNamespaceManager
来提供名称空间:
var namespaceMgr = new XmlNamespaceManager(doc.NameTable);
namespaceMgr.AddNamespace("x", "urn:schemas-microsoft-com:office:spreadsheet");
namespaceMgr.AddNamespace("ss", "urn:schemas-microsoft-com:office:spreadsheet");
var node = doc.SelectSingleNode("//x:Worksheet[@ss:Name='Pricing']", namespaceMgr);
请注意,名称空间的前缀不必与XML中的前缀匹配 - 名称空间计数的值。所以,例如,我已经将ss
定义为XML,但默认(根)命名空间我将其命名为x
- 只要其值相同就无关紧要。
为了更严格,您当然可以将XPath更改为/x:Workbook/x:Worksheet[@ss:Name='Pricing']
。