2012-01-10 171 views
0

我有這樣的XML:解析SOAP XML

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <SampleResponse xmlns="http://tempuri.org/"> 
      <SampleResult> 
       <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" 
           xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
        <NewDataSet xmlns=""> 
         <Table diffgr:id="Table1" msdata:rowOrder="0"> 
          <tag1>tag1 text</tag1> 
          <tag2>tag2 text</tag2> 
         </Table> 
         <Table diffgr:id="Table2" msdata:rowOrder="1"> 
          <tag1>tag1 text</tag1> 
          <tag2>tag2 text</tag2> 
         </Table> 
        </NewDataSet> 
       </diffgr:diffgram> 
      </SampleResult> 
     </SampleResponse> 
    </soap:Body> 
</soap:Envelope> 

所以,我用下面的代碼解析上面的XML:

string XMLresponse = e.response; 
var XResult = XElement.Parse(XMLresponse); 

var result = XResult.Descendants("Table") 
    .Select(t => new 
    { 
     tag1 = t.Descendants("tag1").First().Value, 
     tag2 = t.Descendants("tag2").First().Value, 
    }); 

foreach (var res in result) 
{ 
    string str = res.tag1; // here i am able get the response 
} 

listbox.ItemsSource = result; 

但我不能將其綁定到列表框。我有一個列表框象下面這樣:

<ListBox x:Name="listbox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical"> 
       <TextBlock Text="Sample" ></TextBlock> 
       <TextBlock Text="{Binding tag1}" ></TextBlock> 
       <TextBlock Text="{Binding tag2}" ></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

在我已經加入一個TextBlock,其被重複兩次列表框。但動態文本塊並不與數據綁定。

回答

1

這兩個動態值表示爲字段,而不是屬性。既然你只能綁定到XAML中的屬性,你需要用你的兩個屬性創建一個強類型的數據結構,然後選擇這些值。

是這樣的:

class V 
{ 
    public string tag1 { get; set; } 
    public string tag2 { get; set; } 
} 

var result = XResult.Descendants("Table").Select(t => new V 
      { 
       tag1 = t.Descendants("tag1").First().Value, 
       tag2 = t.Descendants("tag2").First().Value, 
      }); 
+0

感謝您的響應克勞斯喬根森。這個解決方案爲我工作。 – 2012-01-16 06:13:12

+0

克勞斯還有一個問題。在我的XML中有時會丟失名爲tag2的標籤。在這裏我想像上面解析它,如果特定的標籤有時丟失,有時它應該是空的該對象。 – 2012-01-16 14:37:08