我无法在循环时从xml获取值,我想获取HostedService中每个元素的值。对于例如服务名称,网址等。
以下是我的代码
XDocument doc;
using (Stream input = System.IO.File.OpenRead(@"D:\Test.xml"))
{
doc = XDocument.Load(input);
foreach (var events in doc.Root.Descendants("HostedServices")) // loop through all events
{
}
}
XML示例:
<HostedServices xmlns="http://schemas.microsoft.com/windowsazure"xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HostedService>
<Url>https://www.google.com</Url>
<ServiceName>sharepoint2013vm</ServiceName>
<HostedServiceProperties>
<Description i:nil="true" />
<Location>East Asia</Location>
<Label>c2hhcmVwb2ludDIwMTN2bQ==</Label>
<Status>Created</Status>
<DateCreated>2015-01-13T03:42:21Z</DateCreated>
<DateLastModified>2015-01-13T03:42:46Z</DateLastModified>
<ExtendedProperties>
<ExtendedProperty>
<Name>ResourceGroup</Name>
<Value>sharepoint2013vm</Value>
</ExtendedProperty>
<ExtendedProperty>
<Name>ResourceLocation</Name>
<Value>East Asia</Value>
</ExtendedProperty>
</ExtendedProperties>
</HostedServiceProperties>
</HostedService>
<HostedService>
</HostedService>
</HostedServices>
答案 0 :(得分:1)
这是一种方法。
XDocument doc;
using (Stream input = System.IO.File.OpenRead("XMLFile1.xml"))
{
doc = XDocument.Load(input);
XmlNamespaceManager nm = new XmlNamespaceManager(new NameTable());
XNamespace ns = doc.Root.GetDefaultNamespace();
nm.AddNamespace("ns", ns.NamespaceName);
foreach (var hostedService in doc.Root.XPathSelectElements("ns:HostedService",nm)) // loop through all events
{
if (hostedService.XPathSelectElement("ns:ServiceName", nm) != null)
{
var service = hostedService.XPathSelectElement("ns:ServiceName",nm).Value;
}
if (hostedService.XPathSelectElement("ns:Url",nm) != null)
{
var url = hostedService.XPathSelectElement("ns:Url",nm).Value;
}
}
}
答案 1 :(得分:1)
使用此:
XDocument doc = XDocument.Load(@"D:\Test.xml");
将XML文件加载到内存中。
您必须使用XNamespace
,因为您的原始XML声明了一个:
XNamespace ns = "http://schemas.microsoft.com/windowsazure";
要遍历<HostedService>
的所有元素,请使用此:
foreach (var events in doc.Descendants(ns+"HostedService").Elements())
{
}
上述foreach
将允许您访问Elements()
的所有子 <HostedService>
,即
<Url>
<ServiceName>
和 <HostedServiceProperties>
另一方面,如果您要访问<HostedService>
下面的所有元素(包括子元素等),请使用以下内容;
foreach (var events in doc.Descendants(ns + "HostedService").DescendantNodes().OfType<XElement>())
{
}
以上内容可让您访问:
<Url>
<ServiceName>
<HostedServiceProperties>
<Description>
<Location>
<Label>
答案 2 :(得分:0)
您需要使用元素名称指定XML
命名空间:
XNamespace ns = "http://schemas.microsoft.com/windowsazure";
foreach (var events in doc.Root.Descendants(ns + "HostedServices"))
{
}
有关详细信息,请查看Working with XML Namespaces。