2013-01-17 29 views
1

子元素我有XML如下格式:XML閱讀重複使用相同的名稱,父C#

<rows> 
    <rows> 
     <primitiveValue>000</primitiveValue> 
    </rows> 
    <rows> 
     <primitiveValue>58316</primitiveValue> 
    </rows> 
    <rows> 
    <primitiveValue>133083.0</primitiveValue> 
    </rows> 
</rows> 
<rows> 
    <rows> 
    <primitiveValue>001</primitiveValue> 
    </rows> 
    <rows> 
    <primitiveValue>66018</primitiveValue> 
    </rows> 
    <rows> 
    <primitiveValue>172546.0</primitiveValue> 
    </rows> 
</rows> 

我需要分割每行的父元素的數據,但不知道如何做到這一點。

我試過下面的代碼,但是這循環遍歷每一行的實例並導致重複。

 string Values = ""; 

     foreach (XElement element in xDoc.Descendants("rows")) 
     { 

      foreach (XElement childElement in element.Descendants("rows").Elements("primitiveValue")) 
      { 

       Values = Values + "," + childElement.Value.ToString(); 

      } 


     } 

有人可以幫忙嗎?

+0

你可以根本改變xml嗎?如果是這樣,那麼你應該讓它成爲''而不是調用所有行。 –

+0

不,因爲它來自谷歌分析API。它在JSON中自動返回,然後我將其轉換爲XML,因爲我想使用我已經設置爲將每行導入xml到SQL Server DB的進程 –

+0

如果是這種情況,我建議您查看[JSON。淨](http://stackoverflow.com/q/814001/299327)從JSON轉換爲XML而不是滾動自己的。 –

回答

0

很簡單與System.Xml.XPath.Extensions

var values = xdoc.XPathSelectElements(@"//rows/rows/primitiveValue").Select(v => (double)v); 
string result = String.Join(",", values); 

值將被IEnumerable<double>含有primitiveValue元素的值。結果將被連接成所有值的字符串。順便說一句,你缺少xml中的根元素。

UPDATE

IEnumerable<string> result = 
      xdoc.Root.Elements("rows") 
       .Select(r => String.Join(",", r.Descendants("primitiveValue") 
               .Select(v => (double)v))); 

這將返回字符串的序列,每個串將包含內排的連接值。如果您需要原始字符串而不是double值,則將值節點轉換爲字符串。

+0

我需要將原始值分成若干行,雖然 在此示例中,每行有3個值。我在一個自動化的過程中工作,每行的值的數量也會有所不同 –

+0

@AlistairMcIntyre對不起,沒有得到你想要做的。用你的示例xml這段代碼返回字符串,所有值爲'0,58316,133083,1,66018,172546' –

+0

沒問題。你知道我怎麼能得到每行? –

1

無論它們在XML樹下有多遠,後代都會找到所有正在尋找名稱的節點。試着用這樣的實驗:

foreach (XElement element in xDoc.Children("rows")) 
     { 
      foreach (XElement childElement in element.Descendants("rows").Elements("primitiveValue")) 
      { 
       Values = Values + "," + childElement.Value.ToString(); 
      } 
     } 

的關鍵是使用兒童應該只返回直接根元素下,而不是搜索XML文檔的整個結構匹配的元素節點。

+0

表示感謝。我不能找到xdocument兒童方法。我是否缺少名稱空間或其他東西? –

相關問題