2011-07-07 80 views
0

這些是在檢索這些多個元件我2次的嘗試中,第一隻選擇第一盒&第一個文本元素C#XML多個元素

所述第二檢索所有,但它們並不分離variables--

var xmlDoc = document.Root.Elements("Page") 
          .Select(element => new 
          { 
          Box = (string)element.Element("Box"), 
          Text = (string)element.Element("Text"), 
          }).ToList(); 


var xmlDoc = document.Root.Descendants("Page") 
          .Elements() 
          .Select(x => x.Value) 
          .ToList(); 

XML示例:

<?xml version="1.0" standalone="yes"?> 
<PrintJob> 
<Page> 
<Box>0000,0000,0190,0135</Box> 
<Box>0050,0100,0190,0135</Box> 
<Text>0000,0000,"ABCdef123456"</Text> 
<Text>0000,0000,"ABCdef123456"</Text> 
<Text>0000,0050,"ABCdef123456"</Text> 
<Text>0000,0050,"ABCdef123456"</Text> 
</Page> 
</PrintJob> 

環檢索元素:

foreach (var x in xmlDoc) 
{ 
    //result += "box: " + x.Box + "\n"; 
    //result += "text: " + x.Text + "\n"; 
    result += "x: " + x + "\n"; 
} 

如何我得到的結果是這樣的:

box: 0000,0000,0190,0135 
box: 0050,0100,0190,0135 
text: 0000,0000,"ABCdef123456" 
text: 0000,0000,"ABCdef123456" 
text: 0000,0050,"ABCdef123456" 
text: 0000,0050,"ABCdef123456" 
+2

所以,你想究竟是什麼? –

+0

那麼你的問題是什麼? – SwDevMan81

回答

2

您正在尋找這樣的事情?

var page = document.Element("PrintJob") 
        .Element("Page"); 

var boxes = page.Elements("Box") 
       .Select(x => (string)x) 
       .ToList(); 

var texts = page.Elements("Text") 
       .Select(x => (string)x) 
       .ToList(); 

foreach (var box in boxes) 
    Console.WriteLine("Box: " + box); 
foreach (var text in texts) 
    Console.WriteLine("Text: " + text); 

輸出:

 
Box: 0000,0000,0190,0135 
Box: 0050,0100,0190,0135 
Text: 0000,0000,"ABCdef123456" 
Text: 0000,0000,"ABCdef123456" 
Text: 0000,0050,"ABCdef123456" 
Text: 0000,0050,"ABCdef123456" 

var items = document.Element("PrintJob") 
        .Element("Page") 
        .Elements() 
        .Select(x => x.Name.LocalName + ": " + (string)x) 
        .ToList(); 

foreach (var item in items) 
    Console.WriteLine(item); 

輸出:

 
Box: 0000,0000,0190,0135 
Box: 0050,0100,0190,0135 
Text: 0000,0000,"ABCdef123456" 
Text: 0000,0000,"ABCdef123456" 
Text: 0000,0050,"ABCdef123456" 
Text: 0000,0050,"ABCdef123456" 

var items = document.Element("PrintJob") 
        .Element("Page") 
        .Elements() 
        .Select(x => new 
           { 
            Box = (x.Name.LocalName == "Box") 
              ? (string)x 
              : null, 
            Text = (x.Name.LocalName == "Text") 
              ? (string)x 
              : null 
           }) 
        .ToList(); 

foreach (var item in items) 
    Console.WriteLine("Box: " + item.Box + " Text: " + item.Text); 

輸出:

 
Box: 0000,0000,0190,0135 Text: 
Box: 0050,0100,0190,0135 Text: 
Box: Text: 0000,0000,"ABCdef123456" 
Box: Text: 0000,0000,"ABCdef123456" 
Box: Text: 0000,0050,"ABCdef123456" 
Box: Text: 0000,0050,"ABCdef123456" 
+0

看起來不錯,可以只用一個列表來完成,就像我的第一個例子的變體一樣? - 也許這不是要走的路,但試圖從你的第二個答案瞭解這個 - –

+0

,你怎麼做:foreach(項目中的變量項)Console.WriteLine(「Box:」+ item.Box +「Text :「+ item.Text) –

+0

@Scott:這應該是什麼輸出? – dtb

0
var xmlDoc = document.Root.Descendants("Page") 
          .Elements(); 
foreach(var x in xmlDoc) 
{ 
    Console.WriteLine(x.Name + ": " + x.Value); 
}