2012-05-20 123 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

那麼你究竟想要選擇什麼?在你的查詢中,你看起來像是在試圖創建一個'Boelements'的列表,它是BoTblPacientes的孩子? – psubsee2003

+0

嗨安東尼奧,我想讓所有的後來填寫一個類。 – NewCastle79

+0

@ NewCastle79所以你想要一個'BoTblPacientes'列表? – psubsee2003

回答

1

您最初的「但不工作」的聲明是不是很有益,因爲你並沒有真正澄清什麼是不工作的,而是從錯誤中我明白了,我會猜測你的查詢ISN不選擇任何東西。

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

我得到count = 0這是問題所在。 – NewCastle79

+0

如果我使用XNamespace ns =「http://www.asd.com」; XDocument xDocument = XDocument.Load(txt); var q =(來自xDocument.Descendants(ns +「colecciones」)中的c select c).ToList();工作,但如果使用where子句不工作 – NewCastle79

+0

對不起,我沒有測試我的代碼,只是複製了一部分初始查詢,我編輯了我的查詢,請現在試試。 – psubsee2003