使用linq2xml读取自定义标签

时间:2012-05-20 16:20:07

标签: c# xml linq-to-xml

如何使用linq2xml读取标签?

var q = (from c in xDocument.Descendants("colecciones").Descendants("BoTblPacientes")
                    select c).ToList(); 

但是不行。

<?xml version="1.0" ?>
<DalClassObject xmlns="http://www.asd.com">
  <objeto class="BoTblPacientes"></objeto>
  <validador>true</validador>
  <mensaje>El paciente  existe en el sistema .</mensaje>
  <colecciones>
    <BoTblPacientes>
      <tblpacientesmotivoconsulta>5</tblpacientesmotivoconsulta>
      <tblpacientestlfcasa>5</tblpacientestlfcasa>
      <tblpacientescelular>5</tblpacientescelular>
      <tblpacientesoficina>5</tblpacientesoficina>
      <tblpacientescorreo>5</tblpacientescorreo>
      <tblpacientesdireccion>5</tblpacientesdireccion>
      <tblpacientesapellidos>5</tblpacientesapellidos>
      <tblpacientesdocumento>5</tblpacientesdocumento>
      <tblpacientessexoid>0</tblpacientessexoid>
      <tblpacientesfechanacimiento class="sql-date">2012-05-13</tblpacientesfechanacimiento>
      <tblpacientesnombres>5</tblpacientesnombres>
      <tblpacientesid>2</tblpacientesid>
      <tblpacientesestadocivil>0</tblpacientesestadocivil>
      <tblpacientesfecharegistro class="sql-date">2012-05-13</tblpacientesfecharegistro>
      <tblpacienteidmaster>0</tblpacienteidmaster>
    </BoTblPacientes>
    <BoTblPacientes>
      <tblpacientesmotivoconsulta>23232</tblpacientesmotivoconsulta>
      <tblpacientestlfcasa>2332</tblpacientestlfcasa>
      <tblpacientescelular>23</tblpacientescelular>
      <tblpacientesoficina>23</tblpacientesoficina>
      <tblpacientescorreo>23</tblpacientescorreo>
      <tblpacientesdireccion>2323</tblpacientesdireccion>
      <tblpacientesapellidos>ewr</tblpacientesapellidos>
      <tblpacientesdocumento>5</tblpacientesdocumento>
      <tblpacientessexoid>0</tblpacientessexoid>
      <tblpacientesfechanacimiento class="sql-date">2012-03-29</tblpacientesfechanacimiento>
      <tblpacientesnombres>wer</tblpacientesnombres>
      <tblpacientesid>3</tblpacientesid>
      <tblpacientesestadocivil>0</tblpacientesestadocivil>
      <tblpacientesfecharegistro class="sql-date">2012-05-13</tblpacientesfecharegistro>
      <tblpacienteidmaster>0</tblpacienteidmaster>
    </BoTblPacientes>
  </colecciones>
</DalClassObject>

1 个答案:

答案 0 :(得分:1)

您最初的“但不起作用”声明并不是很有帮助,因为您并没有真正澄清什么不起作用,但是从我看到的错误中,我猜测您的查询没有选择任何内容

您的xml根元素声明了一个命名空间,但您没有在查询中指定该命名空间,因此没有与您在Descendants()方法中提供的字符串匹配。

您需要使用本地名称查找

var q = (from c in xDocument.Descendants()
         where c.Name.LocalName == "BoTblPacientes"
         select c).ToList()

为了完整起见,正如OP在评论中提到的那样,另一种选择是将命名空间添加到查询中:

XNamespace ns = "http://www.asd.com";
var q = (from c in xDocument.Descendants(ns + "colecciones") 
         select c).ToList();