[英]How do I get a string array of these xml values?
我試圖使用linq到xml,但我對此很陌生。
這是xml:
<BrandHosts>
<Brand>
<ResourceName>BrandInfo_AAA</ResourceName>
<Hosts>
<Host>www.aaa.com</Host>
<Host>portal.aaa.com</Host>
<Host>aaa.com</Host>
</Hosts>
</Brand>
<Brand>
<ResourceName>BrandInfo_BBB</ResourceName>
<Hosts>
<Host>www.bbb.com</Host>
<Host>bbb.com</Host>
<Host>portal.bbb.com</Host>
</Hosts>
</Brand>
<Brand>
<ResourceName>BrandInfo_CCC</ResourceName>
<Hosts>
<Host>www.CCC.com</Host>
</Hosts>
</Brand>
<Brand>
<ResourceName>BrandInfo_DDD</ResourceName>
<Hosts>
<Host>www.DDD.com</Host>
</Hosts>
</Brand>
</BrandHosts>
我將具有一個字符串值,該字符串值具有我需要從此xml中提取的資源名稱。 因此,例如,我的參數可能是“ BrandInfo_BBB”。 而且我需要返回一個字符串數組,其中包含該塊中的所有主機。 我可以用linq to xml做到這一點嗎?
首先:將XML加載到XDocument
對象中並准備結果變量:
var doc = XDocument.Load("Input.txt");
string[] hosts;
然后,您可以查詢文檔。 我假設ResourceName
在輸入XML中是唯一的 。
var resourceName = "BrandInfo_DDD";
var brand = doc.Root.Elements("Brand").SingleOrDefault(b => (string)b.Element("ResourceName") == resourceName);
if (brand != null)
{
hosts = brand.Element("Hosts")
.Elements("Host")
.Select(h => (string)h)
.ToArray();
}
對於非唯一ResourceName
var brands = doc.Root.Elements("Brand").Where(b => (string)b.Element("ResourceName") == resourceName).ToArray();
string[] hosts;
if (brands.Length > 0)
{
hosts = brands.SelectMany(b => b.Element("Hosts")
.Elements("Host")
.Select(h => (string)h)
).ToArray();
}
string toSearch = "BrandInfo_BBB";
XDocument xDoc = XDocument.Load("XMLFile1.xml");
string[] strArr = xDoc.Descendants("Brand").Where(n => n.Element("ResourceName").Value == toSearch).Single()
.Descendants("Host").Select(h => h.Value).ToArray();
只是提供另一種選擇...
XDocument doc = XDocument.Load("BrandHosts.xml");
string resourceName = "BrandInfo_DDD";
var resources = doc
.Descendants("Brand")
.Where(n => n.Element("ResourceName").Value == resourceName);
var hosts = resources.Any() ?
resources.Descendants("Host").Select(h => h.Value) :
Enumerable.Empty<string>();
通過使用上面的Enumerable.Empty<>
(當不返回任何資源時),您可以確保hosts
永遠不會為空,因此立即使用它總是安全的...
string[] vals = hosts.ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.