2014-07-23 38 views
0

我最近开始在c#中学习xml,xpath,xmldocuemtn。如何使用命名空间获取xml元素

我有一个XML如图bellow..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); 

你能告诉我怎样可以得到工作表elemet与SS:Name属性= '定价'

回答

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的默认(root)名称空间 - 只要其值相同即可。

为了更加严格,当然可以将XPath更改为/x:Workbook/x:Worksheet[@ss:Name='Pricing']

+0

konard ...你是位于!!!!> .. 正在为此工作4个小时...非常感谢你.. – kk0239

相关问题