如何使用Linq打开Open XML

时间:2017-04-06 23:29:22

标签: c# xml linq

您好我想通过我的xml中的属性环境过滤来获取连接 但我得到一些错误,任何人都可以帮助。

这是我的代码:



XElement xelement = XElement.Load(xml);
var Connections = from conn in xelement.Elements("Conections")
                  where (String)conn.Element("Conection").Attribute("Enviroment") == "Test"
                  select conn;

foreach (XElement conection in Connections)
{
    MessageBox.Show(conection.Element("Conection").Value);
}




这是我的xml



<?xml version="1.0" encoding="utf-8"?>
<Config>
  <General>
    <FormaInicial></FormaInicial>
    <DiasRecordatorioBuro></DiasRecordatorioBuro>
    <EnviarSMSDomiciliacion>rue</EnviarSMSDomiciliacion>
    <SimularDeathLock></SimularDeathLock>
    <IsProductionEnviroment></IsProductionEnviroment>
    <WaitingTimeBetweenExecutions></WaitingTimeBetweenExecutions>
    <NumberTriesBeforeRestartService></NumberTriesBeforeRestartService>
  </General>
  <Conections>
    <Conection Enviroment="Production">
      <Servidor></Servidor>
      <BaseDatos>==</BaseDatos>
      <Usuario></Usuario>
      <Password></Password>
    </Conection>
    <Conection Enviroment="Test">
      <Servidor></Servidor>
      <BaseDatos></BaseDatos>
      <Usuario></Usuario>
      <Password></Password>
    </Conection>
  </Conections>
</Config>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您面临的问题(最有可能)是“Connections”是“Connection”元素的集合,当您尝试按属性过滤它们时 - 您将只检查第一个元素。您需要先使用SelectMany来展平集合:

bw.write(returnMessage + "\n");

然后在您的结果中,您将拥有“连接”类型的XElements集合:

var connections = xelement.Elements("Conections")
            .SelectMany(c => c.Elements("Conection"))
            .Where(c => c.Attribute("Enviroment").Value == "Test");