使用 linq2xml 阅读自定义标记

本文关键字:自定义 linq2xml 使用 | 更新日期: 2023-09-27 18:34:40

如何使用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>

使用 linq2xml 阅读自定义标记

您最初的"但不起作用"语句不是很有帮助,因为您并没有真正澄清什么不起作用,但是从我看到的错误来看,我会猜测您的查询没有选择任何东西。

您的 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();