2011-09-22 80 views
0

我目前正在寫一個C#類,允許我從OData提要構造實體。 不要問爲什麼,我只需要它的那一刻:)重複:默認命名空間XPath表達式

的XML的代碼片段看起來是這樣的:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<entry xml:base="http://demo.tenforce.acc/Api.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom"> 
    <id>http://demo.tenforce.acc/Api.svc/Items(387)</id> 
    <title type="text"></title> 
    <updated>2011-09-22T07:35:54Z</updated> 
    <author> 
    <name /> 
    </author> 
    <link rel="edit" title="Item" href="Items(387)" /> 
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Children" type="application/atom+xml;type=feed" title="Children" href="Items(387)/Children" /> 
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Parent" type="application/atom+xml;type=entry" title="Parent" href="Items(387)/Parent" /> 
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Attachments" type="application/atom+xml;type=feed" title="Attachments" href="Items(387)/Attachments" /> 
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Predecessors" type="application/atom+xml;type=feed" title="Predecessors" href="Items(387)/Predecessors" /> 
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Successors" type="application/atom+xml;type=feed" title="Successors" href="Items(387)/Successors" /> 
    <category term="TenForce.Execution.Api2.Objects.Item" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> 
    <content type="application/xml"> 
    <m:properties> 
     <d:Id m:type="Edm.Int32">387</d:Id> 
    </m:properties> 
    </content> 
</entry> 

我已經創建了加載整個XML字符串轉換爲代碼片段一個XmlDocument,並生成一個XmlNamespaceManager以及訪問各種命名空間。

我試圖從XML中選擇<category>元素,但我似乎無法獲得正確的Xpath表達式。我已經試過如下:

  • //進入/類別
  • 後裔::的xmlns:cateogry
  • // d:類
  • // L:類
  • //類別
  • // xml:category

但是似乎沒有人選中有問題的節點。

+0

可能重複](http://stackoverflow.com/questions/1008930/selecting-nodes-with-the-default-namespace) –

+0

另一個重複[在C#中使用Xpath與默認名稱空間](http://stackoverflow.com/questions/585812) /使用-XPath的與默認名稱空間中-c)的 –

回答

0

哦,沒關係,我找到了解決方案。 我不得不添加的命名空間的原子元素....

var manager = new XmlNamespaceManager(_mDocument.NameTable); 
manager.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices"); 
manager.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"); 
manager.AddNamespace("atom", "http://www.w3.org/2005/Atom"); 

這讓我用//原子選擇<category>元素:類[使用默認的命名空間選擇節點