我目前有一个XElement。我用它来打印它:
System.Diagnostics.Debug.WriteLine(hostedServices);
结果:
<HostedServices xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HostedService>
<Url>url</Url>
<ServiceName>testcloudservice2</ServiceName>
<HostedServiceProperties>
<Description>New cloud service</Description>
<Location>West Europe</Location>
<Label>dGVzdGNsb3Vkc2VydmljZTI=</Label>
<Status>Created</Status>
<DateCreated>2013-04-02T09:40:27Z</DateCreated>
<DateLastModified>2013-04-02T09:40:26Z</DateLastModified>
<ExtendedProperties />
</HostedServiceProperties>
</HostedService>
<HostedService>
<Url>url</Url>
<ServiceName>testtesttest123445</ServiceName>
<HostedServiceProperties>
<Description>New cloud service</Description>
<Location>West Europe</Location>
<Label>dGVzdHRlc3R0ZXN0MTIzNDQ1</Label>
<Status>Created</Status>
<DateCreated>2013-04-02T09:30:34Z</DateCreated>
<DateLastModified>2013-04-02T09:30:34Z</DateLastModified>
<ExtendedProperties />
</HostedServiceProperties>
</HostedService>
</HostedServices>
我想获取每个<HostedService>
的ServiceName和Description。我怎么能得到这些?
答案 0 :(得分:2)
您应该使用XNamespace
来选择元素:
XDocument xdoc = XDocument.Load(path_to_xml);
XNamespace ns = "http://schemas.microsoft.com/windowsazure";
var hostedServices =
from s in xdoc.Descendants(ns + "HostedService")
select new
{
ServiceName = (string)s.Element(ns + "ServiceName"),
Description = (string)s.Element(ns + "HostedServiceProperties")
.Element(ns + "Description")
};
这将返回具有属性ServiceName
和Description
的匿名对象序列。用法:
foreach(var service in hostedServices)
Debug.WriteLine(service.ServiceName + ": " + service.Description);
答案 1 :(得分:1)
var xml = XDocument.Parse(s);
XNamespace ns = "http://schemas.microsoft.com/windowsazure";
var descriptions = xml.Descendants(ns + "HostedService")
.Select(prop =>
new { Description = prop.Element(ns + "ServiceName").Value,
ServiceName = prop.Descendants(ns + "Description").First().Value});
//LINQPad specific print call
descriptions.Dump();
打印:
Description ServiceName
testcloudservice2 New cloud service
testtesttest123445 New cloud service
答案 2 :(得分:0)
尝试:
var descriptions = hostedServices.Elements().Select(
x=> x.Descendants(y=>y.Name=="Description").FirstOrDefault());
var serviceNames = hostedServices.Elements().Select(
x=> x.Descendants(y=>y.Name=="ServiceName").FirstOrDefault());
如果你想要他们加:
var descAndNames = hostedServices.Elements().Select(
x=> new { Name = x.Descendants(y=>y.Name=="ServiceName").FirstOrDefault(),
Description = x.Descendants(y=>y.Name=="Description")
.FirstOrDefault()
});
答案 3 :(得分:0)
这里棘手的时刻是你需要考虑名称空间:
XNamespace ns = "http://schemas.microsoft.com/windowsazure";
var serviceNames = element.Descendants(ns + "ServiceName");
var descriptions = element.Descendants(ns + "Description");
var serviceNameValues = serviceNames.Select(x => x.Value);
var descriptionValues = descriptions.Select(x => x.Value);