2014-07-23 68 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

相關問題