2015-10-09 95 views
0

我需要從C#中的xml中選擇數據。 XML的結構如下:在C中對XML進行LINQ查詢#

<?xml version="1.0"?> 
<xdoc version=""...> 
    <something> 
     ... 
    </something> 
    <fields> 
     <field dimensions="" name="something else"> 
      <ff>x</ff> 
      <text>something</text> 
      <gg>x</gg> 
     </field> 
     <field dimensions="" name="SUPPLIER_NAME"> 
      <ff>x</ff> 
      <text>This is what I want</text> 
      <gg>x</gg> 
     </field> 
     <field dimensions="" name="something else2"> 
      <ff>x</ff> 
      <text>something2</text> 
      <gg>x</gg> 
     </field> 
    </fields> 
    <something2> 
     ... 
    </something2> 
</xdc> 

查詢的代碼是以下幾點:

XElement root = XElement.Load(path); 
IEnumerable<XElement> hodnota = from el in root.Elements("fields") 
           where (string)el.Attribute("name") == "SUPPLIER_NAME" 
           select el; 


foreach (XElement in hodnota) 
    textBox1.Text += (string)el.Atribute("text") + Environment.NewLine; 

目標是選擇文本「這就是我想要的」,從那裏元素屬性的名稱是「SUPPLIER_NAME」。然後發送到excel,這部分工作完美無瑕,但我無法找到正確的表達,所以即時通訊寫入文本框,以加快測試。我試圖選擇字符串形式的XML,但沒有成功,所以這樣做。

有人可以看看提供的代碼,並告訴我什麼即時通訊做錯了?

謝謝 安德魯

+1

從'textBox1.Text + =(字符串)el.Atribute( 「文本」)+ Environment.NewLine'到'textBox1.Text樣本+ = el.Element(「text」)。Value + Environment.NewLine'? –

回答

1

鑑於正確的XML結構,這給了我希望的結果。

string content = File.ReadAllText(@"C:\YourFolder\Yourfile.xml"); 
XDocument xDoc = XDocument.Parse(content); 

var supplierNameField = xDoc.Descendants("field").First(d => d.Attribute("name").Value == "SUPPLIER_NAME"); 
var text = supplierNameField.Element("text").Value; 
0

使用後代

  XDocument doc = XDocument.Load(FILENAME); 
      List<XElement> hodnota = doc.Descendants("field").Where(el => el.Attribute("name").Value == "SUPPLIER_NAME").ToList();​ 
1

你的問題是,屬性是在現場,而不是領域。下面是應該工作

IEnumerable<XElement> hodnota = from el in root.Elements("fields").Elements("field") 
            where (string)el.Attribute("name") == "SUPPLIER_NAME" 
            select el; 


    foreach (XElement el in hodnota) 
     Console.WriteLine(el.Element("text").Value); 

或只是

IEnumerable<string> hodnota = from el in root.Elements("fields").Elements("field") 
            where (string)el.Attribute("name") == "SUPPLIER_NAME" 
            select el.Element("text").Value; 


    foreach (string el in hodnota) 
     Console.WriteLine(el);