2011-12-22 41 views
-3
<root> 
    <data1> 
     <Element1>Value</Element1> 
     <Element2>Value</Element2> 
     <Element3>Value</Element3> 
    </data1> 
    <data2> 
     <Element1>Value</Element1> 
     <Element2>Value</Element2> 
    </data2> 
</root> 

從上面的XML我想作一個XML看起來像這樣:LINQ多列

<root> 
    <d1e1>value<d1e1> 
    <d1e2>value<d1e2> 
    <d2e1>value<d2e1> 
</root> 

什麼是處理,最有效的方法是什麼? Foreach或Linq在理論上Linq應該在大多數情況下更快,速度是這個項目的本質

任何想法?

+6

你能解釋更詳細地transformatino如何意味着要發生?爲什麼沒有d1e3元素或d2e2元素? – 2011-12-22 08:20:54

+2

「理論上linq應該更快」並非如此。 LINQ只是捷徑碼。它不是更快。看看LINQ表達式如何編譯成IL,你就會明白。 – Amy 2011-12-22 08:26:13

+0

作爲一個答案elemet結構: = data1->元素1 = data1->元素2 = data2->部件1 – Jester 2011-12-22 08:54:10

回答

0

這個想法是從Y池中選擇X個節點,這裏的示例被簡化爲向您顯示問題。一般來說,它就像我有一個多層次的XML,我只需要有一個sublevel(aka root + level1),但是從源代碼我只需要有一些我感興趣的元素。

無論如何issiue被解決因爲我用foreach做了cos因爲我發現如果你在xml中指定了一個shema而不是可訪問的LINQ dosent whant無論如何工作。

溶液是這樣的:

  1. 我提出的函數:

    public System.Xml.XmlElement GetSubElement(XmlElement Parent, string element) 
    { 
    System.Xml.XmlElement ret = null; 
    if (Parent == null) 
        return ret; 
    
    XmlNodeList ContentNodes = Parent.GetElementsByTagName(element); 
    if (ContentNodes.Count > 0) 
    { 
        XmlNode node = ContentNodes.Item(0); 
        ret = (XmlElement)node; 
    } 
    
    return ret; 
    } 
    
  2. 我發上區域中的foreach循環被重複

  3. 我得到的元件即在具有上述功能的重複上下文之外。

無論如何,這解決了我。

編輯: 不知道怎麼得到這個代碼能夠正確顯示COS按Ctrl + K dosent似乎做