2010-10-13 42 views
0

我有在一個XDocument可變完整的XML文件,這是我從這樣的如何提取XDocument變量的XML內容?

using (var reader = XmlReader.Create("website")) 
     { 
      doc = XDocument.Load(reader); 
     } 

我需要的XML的結構,並通過其節點瀏覽一些API獲得,而是通過的XDocument變量,我只能將整個文檔放在一個節點中,不能單獨提取每個節點。那麼任何解決方案或我應該用另一種方式?

回答

0
XmlDocument xdoc; 
xdoc = new XmlDocument(); 
xdoc.Load(XmlReader.Create("weblink")); 

的的XDocument是不可能進行分析,並提取其XML值這是可能在XmlDocument的

+0

我認爲你需要的是XDocument.Load()。這是一個靜態方法。我已經更新了我的答案以反映這一點。 – 2010-10-13 11:58:42

+0

你的方法應該可以工作,我猜。但無論如何,我不必使用XDcocument; XmlDocument更簡單,所以我使用它。感謝您的參與,儘管:) – 2010-10-13 12:18:17

+0

我不同意,我發現XDocument和XElment更容易使用,因爲一切都是強類型的。當你使用xsd文件驅動它時,情況更爲真實。當你有時間的時候你會檢查出來。 – 2010-10-13 15:34:35

2

http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx 是建設起來

你也可以使用LINQ查詢它

例如

var loaded = XDocument.Load("sdaf"); 
var q = from c in loaded.Descendants("contact") 
     where (int)c.Attribute("contactId") < 4 
     select (string)c.Element("firstName") + 「 「 + 
     (string)c.Element("lastName"); 

帶下我鏈接到網頁上面的好文章。

在我看來,XDocument和XElement對象踢了屁股。 如果你不喜歡他們,那麼去學習xpath和xslt。

0
string xml = reader.ReadToEnd(); 

XmlDocument thisXmlDoc = new XmlDocument(); 
thisXmlDoc.LoadXml(xml); // In your case DOC 

reader.Close(); 

XPathNavigator thisNavigator = thisXmlDoc.CreateNavigator(); 
XPathNodeIterator dossierNodes = thisNavigator.Select("Nodename/node"); 

List<Dossier> thisList = GetDossiers(dossierNodes); 
thisDossierList = thisList.OrderBy(c => c.something).ToList(); 

他正在使用XDocument對象,而不是XMLDocument對象。 - 約翰尼古拉斯52秒前

該死的,你是對的。抱歉!只有設法幫助...

+0

他正在使用的XDocument對象,而不是的XMLDocument對象。 – 2010-10-13 09:41:46

+0

我看,在這裏看起來還不夠好...... – Younes 2010-10-13 09:43:50

+0

XMLDOcument沒有錯,它只是最適合XPath和XSLT方法。 .net只實現xpath 1.0順便說一句 - 這真的影響你可以在xslt中做什麼。哈,我喜歡你做那個順便說一句。儘管如此,仍然偏愛linq2xml。 – 2010-10-13 09:44:21

1

要獲得XDocument你可以嘗試

using (var reader = XmlReader.Create("website")) 
    { 
     var doc = XDocument.Load(reader); 
     var childElements = doc.Elements(); 
    } 

然後做進一步處理的直接子節點,如childElements.Descendants("name").Single().Value

+0

我嘗試了第一部分,但它沒有工作,不知道第二部分。 – 2010-10-13 12:19:16