如何使用命名空间获取xml元素

时间:2014-07-23 16:31:55

标签: c# xml xpath xml-namespaces xmldocument

我最近开始在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;

1 个答案:

答案 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']