2012-05-20 3 views
0

linq2xml을 사용하여 태그를 읽으려면 어떻게해야합니까?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> 
+0

그래서 정확히 무엇을 선택하려고합니까? 귀하의 질의로부터'BoTblPacientes'의 자식 인'XElements'의 목록을 만들려는 것 같습니다. – psubsee2003

+0

안녕하세요 안토니오, 나중에 를 수업에 추가하고 싶습니다. – NewCastle79

+0

@ NewCastle79 그래서'BoTblPacientes'의 목록을 원하십니까? – psubsee2003

답변

1

귀하의 초기 "하지만 작동하지 않습니다"문은 당신이 정말로 작동하지 않는 것을 명확히하지 않는 한 매우 도움이되지 않습니다,하지만 난 볼 수있는 오류를, 당신의 쿼리 ISN 추측하기 위하여려고하고있다 아무것도 선택하지 마라.

xml 루트 요소가 네임 스페이스를 선언했지만 쿼리에서 해당 네임 스페이스를 지정하지 않아 결과적으로 Descendants() 메서드에서 제공하는 문자열과 일치하지 않습니다.

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

당신은 코멘트에 영업 이익에서 언급 한 바와 같이 대신

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

그냥 완전성을 위해

는 또 다른 옵션 대신 쿼리에 네임 스페이스를 추가하는 것입니다 로컬 이름으로 조회해야
+0

나는 count = 0을 얻는다. 이것이 문제이다. – NewCastle79

+0

XNamespace를 사용하는 경우 ns = "http://www.asd.com"; XDocument xDocument = XDocument.Load (txt); var q = (xDocument.Descendants (ns + "colecciones")의 c에서 선택 c) .ToList(); 작동하지만 where 절을 사용하지 않으면 – NewCastle79

+0

죄송합니다. 코드를 테스트하지 않고 작업하고 초기 쿼리의 일부만 복사 했으므로 쿼리를 편집했습니다. 지금 시도하십시오. – psubsee2003