2013-04-23 96 views
0

這裏是我的XML文檔的前幾行:linq to xml不返回可能的命名空間問題的任何結果?

<?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?> 
<ops:world-patent-data xmlns="http://www.epo.org/exchange" xmlns:ops="http://ops.epo.org" xmlns:xlink="http://www.w3.org/1999/xlink"> 
<ops:meta name="elapsed-time" value="83" /> 
<exchange-documents> 
<exchange-document system="ops.epo.org" family-id="34916979" country="EP" doc-number="1726228" kind="A1"> 
    <bibliographic-data> 
    <publication-reference> 
     <document-id document-id-type="docdb"> 
     <country>EP</country> 
     <doc-number>1726228</doc-number>` 

我嘗試使用下面的代碼來提取文檔數:

public class biblio 
    { 
     public string appNumber { get; set; } 
    } 

    XElement xDoc = XElement.Load(@"pathToMyXml.xml"); 
     XNamespace xn = "http://ops.epo.org"; 
     var bib = from exchange in xDoc.Descendants(xn + "exchange-document") 
        where exchange.Attribute("kind").Equals("A1") 
        select new biblio 
        { 
         appNumber = exchange.Element("doc-number").Value 
        }; 

然而,這並不返回任何結果。

我哪裏錯了?

謝謝。

回答

0

doc-number的命名空間是http://www.epo.org/exchange。它已從根節點繼承。您需要在查詢中指定。此外,doc-number不是exchange-document的元素 - 即直接子女。它是一個後代。

XNamespace d = "http://www.epo.org/exchange"; 
var bib = from exchange in xDoc.Descendants(xn + "exchange-document") 
      where (string)exchange.Attribute("kind") == "A1" 
      select new biblio 
      { 
       appNumber = (string)exchange.Descendant(d + "doc-number") 
      }; 

請注意,我改變exchange.Attribute("kind").Equals("A1")(string)exchange.Attribute("kind") == "A1"exchange.Descendant(d + "doc-number").Value(string)exchange.Descendant(d + "doc-number")

如果屬性或後代不存在,則阻止NullReferenceException

+0

感謝您的支持。我對你發佈的內容做了一些改變,但是沒有你的指導,我可能仍然會迷路。 – Free2Rhyme2k 2013-04-24 14:50:47

+0

@ user2065441:由於我的答案中有錯誤,是否需要進行這些更改? – 2013-04-24 14:51:59