HttpWebRequest.Createメソッドを使用してWebServiceを呼び出し、StreamReaderを使用して読み取ります(以下のメソッドがこのジョブを実行します)。
private string ReadWebMethod(string address)
{
var myRequest = (HttpWebRequest)HttpWebRequest.Create(address);
myRequest.Method = "POST";
using (var responseReader = new StreamReader(myRequest.GetResponse().GetResponseStream()))
return responseReader.ReadToEnd();
}
このメソッドはうまく機能し、次のような文字列を出力します。
<ArrayOfAppObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<AppObject>
<Name>MyApp</Name>
<Image>StoreApp.png</Image>
<Version>SM2.1.0</Version>
</AppObject>
</ArrayOfAppObject>
ここで、この文字列を確認したいので、XElemnetを使用して文字列を解析します。(コードの下):
XElement x = XElement.Parse(ReadWebMethod(address));
これで、foreach、x.Elements( "AppObject")を実行すると、アイテムが返されず、foreachがスキップされます。私のforeachは次のようなものです:
foreach (var item in x.Elements("AppObject"))
{
listApplication.Add(new AppObject { Image = item.Element("Image").Value, Name = item.Element("Name").Value, Version = item.Element("Version").Value });
}
ローカル文字列を作成し、「ArrayOfAppObject」(xmlns:xsi = "htt ...)(xmlnamespaceという名前の場合もあります)の後に属性を削除して再度テストします。これも機能し、foreachはスキップされません。
だから、どうすれば名前空間でxmlを使用できますか?