2011-08-16 57 views
0

我知道這應該是簡單的,但我有困難的時候與LINQ瀏覽下面的XML到XML(我覺得<soapenv:Body>是搞亂了我),我需要在這一點上做的是算<addressData>元素的個數。最終,我需要將每個<addressData>元素中讀取每個元素的值。的LINQ to XML導航問題

XML:

<soapenv:Body> 
<getAddrResponse xmlns="http://urlhere.com/v1"> 
    <AddrResponse> 
     <requestorId>123456</requestorId> 
     <address> 
      <addressCount>3</addressCount> 
      <addressData> 
       <addressLine1>123 MAIN ST</addressLine1> 
       <cityName>HOLLYWOOD</cityName> 
       <stateCode>CA</stateCode> 
       <zipCode>90028</zipCode> 
       <zipPlus4Code>1234</zipPlus4Code> 
      </addressData> 
      <addressData> 
       <addressLine1>456 MAIN ST</addressLine1> 
       <cityName>HOLLYWOOD</cityName> 
       <stateCode>CA</stateCode> 
       <zipCode>90028</zipCode> 
       <zipPlus4Code>1234</zipPlus4Code> 
      </addressData> 
      <addressData> 
       <addressLine1>789 MAIN ST</addressLine1> 
       <cityName>HOLLYWOOD</cityName> 
       <stateCode>CA</stateCode> 
       <zipCode>90028</zipCode> 
       <zipPlus4Code>1234</zipPlus4Code> 
      </addressData> 
     </address> 
    </AddrResponse> 
</getAddrResponse> 
</soapenv:Body> 

回答

0

你的XML當前是違法:不定義你的外部命名空間。因此,假如你的XML是真的喜歡

<soapenv:Body xmlns:soapenv="foo.com"> 
... 

你可以得到addressData數是這樣的:

XDocument doc = XDocument.Load("test.xml"); 
XNamespace someNamespace = "http://urlhere.com/v1"; 
int addressCount = doc.Descendants(someNamespace + "addressData").Count(); 
1

你需要採取命名空間和命名空間前綴考慮,包括宣佈soapenv

var xml = "<soapenv:Body xmlns:soapenv=\"" 
      +"http://www.w3.org/2001/12/soap-envelope\">...</soapenv:Body>"; 
var doc = XDocument.Parse(xml); 
XNamespace ns = "http://urlhere.com/v1"; 

var addressDatas = doc.Root.Descendants(ns+"addressData"); 

var count = addressDatas.Count(); 

var firstAddressLine = addressDatas.First().Element(ns+"addressLine1").Value; 
+0

THX。我第一次看到對方的反應和它的工作。看起來像你的方法也可以工作。這是被扔我送行的命名空間的問題。 – Earl