簡體   English   中英

Linq to xml選擇語句

[英]Linq to xml Select statement

我試圖弄清楚如何使用linq到xml進行選擇語句。 如果DeploymentType等於特定值(Enterprise9999),我想返回ServerTypes。

XML:

<Deployments>
  <Deployment>
    <DeploymentType>Enterprise9999</EnterpriseDeploymentType>
    <Servers>
      <DeploymentServer>
        <ServerType>WindowsServer</ServerType>
      </DeploymentServer>
      <DeploymentServer>
        <ServerType>LinuxServer</ServerType>
      </DeploymentServer>
    </Servers>
  </Deployment>
  <Deployment></Deployment>
  <Deployment></Deployment>
</Deployments>

到目前為止,這是我在代碼中所擁有的。 我確定我會以錯誤的方式處理此問題:

XDocument xmlDoc = XDocument.Load(@xmlFile);
IEnumerable<XElement> xlDeployments = from depRows in xmlDoc.Descendants("Deployments")
                                           select depRows;

var deploy = xlDeployments.Descendants("Deployment");

foreach (var dep in deploy)
{
    if (dep.Element("DeploymentType").ToString() == "Enterprise9999")
    {
        MessageBox.Show(dep.Elements("ServerType").ToString());
    }
}

select語句是否需要名稱空間?

我已將您將標簽</EnterpriseDeploymentType>封裝為</DeploymentType>

XDocument xmlDoc = XDocument.Load(@xmlFile);

var deployments = xmlDoc.Descendants("Deployment")
                       .Where(dep => dep.Element("DeploymentType") != null 
                                  && dep.Element("DeploymentType").Value == "Enterprise9999");

var servers = deployments.Descendants("ServerType")
                         .Select(node => node.Value);

Console.WriteLine(string.Join(Environment.NewLine, servers));

印刷品:

WindowsServer
LinuxServer

假設您已根據我的評論更正了XML,則可以使用以下單個查詢:-

var nodes = from n in xml.Descendants("DeploymentType")
                     .Where(x => x.Element("EnterpriseDeploymentType").Value.Equals("Enterprise9999"))
                        select n.Descendants("Servers").Descendants("ServerType").Select(s => s.Value);

這會給你:

WindowsServer LinuxServer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM