我在阅读XML文件(C#)时遇到问题,关键是我可以阅读cfdi:Comprobante
内的所有元素,但是当我想阅读cfdi:emisor
时,我不是能够获得信息,甚至使用:
XmlDocument xml = new XmlDocument();
xml.Load(vnt.FileName);
XmlElement root = xml.DocumentElement;
//gets sub total from cfdi:Comprobante
XmlAttribute total = root.GetAttributeNode("subTotal");
// HERE IS THE BIG PROBLEM
XmlAttribute rfc = root.GetAttributeNode("cfdi:Comprobante/cfdi:Emisor/rfc");
string valor = total.InnerXml;
//string rfcE = rfc.InnerText; //HERE IS THE PROBLEM
dataGridView1.Rows[0].Cells[2].Value = valor;
// dataGridView1.Rows[0].Cells[1].Value = valor;
<?xml version="1.0" encoding="UTF-8"?>
<cfdi:Comprobante LugarExpedicion="ZAPOPAN, JALISCO, MEXICO" metodoDePago="01" tipoDeComprobante="ingreso" total="190.00" subTotal="163.79" noCertificado="00001000000303469404" formaDePago="PAGO EN UNA SOLA EXHIBICION" sello="TWxkop8XLoDKqh9fZe4VMBnRaf2gwYq7oP33BqLKNbBaAvfAyfAoAJ4rlTuhK3m5k9e/jiWAjTdaJ+RO8FJ6L8d5E79gCPZI2gYcVMr/ulIrIHkfiNs37FLBm87vd/0hhbt252Qefr84ALz0bl0XtsDwh6xTmoX2rzFfowXQWIw=" fecha="2017-01-13T21:23:54" folio="4594" version="3.2" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.buzonfiscal.com/ns/addenda/bf/2 http://www.buzonfiscal.com/schema/xsd/Addenda_BF_v20.xsd" xmlns:bfa2="http://www.buzonfiscal.com/ns/addenda/bf/2" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<cfdi:Emisor nombre="MARIA DEL SOCORRO HERNANDEZ SEDANO" rfc="HES12211HN3">
<cfdi:DomicilioFiscal codigoPostal="45019" pais="MEXICO" estado="JALISCO" municipio="ZAPOPAN" colonia="SAN JUAN DE OCOTAN" noExterior="7484" calle="AV VALLARTA"/>
<cfdi:ExpedidoEn codigoPostal="43319" pais="MEXICO" estado="JALISCO" municipio="ZAPOPAN" colonia="SAN JUAN DE OCOTAN" noExterior="7484" calle="AV VALLARTA"/>
<cfdi:RegimenFiscal Regimen="PERSONA FISICA CON ACTIVIDAD EMPRESARIAL"/>
</cfdi:Emisor>
<cfdi:Receptor nombre="SERVICIOS ADMINISTRATIVOS GRACIDA SC" rfc="SAG101208EJ4">
<cfdi:Domicilio codigoPostal="45019" pais="MEXICO" estado="JALISCO" municipio="ZAPOPAN" colonia="ZAPOPAN" noExterior="401" calle="AV PROLONGACION VALLARTA"/>
</cfdi:Receptor>
<cfdi:Conceptos>
<cfdi:Concepto importe="163.79" valorUnitario="163.79" descripcion="CONSUMO" noIdentificacion="001" unidad="No Aplica" cantidad="1"/>
</cfdi:Conceptos>
<cfdi:Impuestos totalImpuestosTrasladados="26.21">
<cfdi:Traslados>
<cfdi:Traslado importe="26.21" tasa="16.00" impuesto="IVA"/>
</cfdi:Traslados>
</cfdi:Impuestos>
答案 0 :(得分:1)
您需要在文档中添加命名空间表:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3");
此外,您的XPath查询对我来说有点怀疑。我会试试这个:
XmlElement emisor = (XmlElement)root.SelectSingleNode("cfdi:Emisor", nsmgr);
XmlAttribute rfc = emisor.GetAttributeNode("rfc");
修改后的代码示例:
XmlDocument xml = new XmlDocument();
xml.Load(vnt.FileName);
// namespace manager added here
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3");
XmlElement root = xml.DocumentElement;
//gets sub total from cfdi:Comprobante
XmlAttribute total = root.GetAttributeNode("subTotal");
// HERE IS THE BIG PROBLEM
// modified XPath query
XmlElement emisor = (XmlElement)root.SelectSingleNode("cfdi:Emisor", nsmgr);
XmlAttribute rfc = emisor.GetAttributeNode("rfc");
string valor = total.InnerXml;
//string rfcE = rfc.InnerText; //HERE IS THE PROBLEM
dataGridView1.Rows[0].Cells[2].Value = valor;
// dataGridView1.Rows[0].Cells[1].Value = valor;