繁体   English   中英

读取 CDATA 中的数据

[英]Read Data in CDATA

我不知道是否有人可以帮助我,我在 c # 工作,我有一个 xml,如下所示:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<autorizacion>
  <estado>AUTORIZADO</estado>
  <numeroAutorizacion>0105202001179184765200120010010144295491442954919</numeroAutorizacion>
  <fechaAutorizacion>2020-05-01T00:29:47-05:00</fechaAutorizacion>
  <ambiente>PRODUCCIÓN</ambiente>
  <comprobante>
    <![CDATA[<?xml version="1.0" encoding="utf-8" standalone="no"?>
      <factura id="comprobante" version="1.1.0">
        <infoTributaria>
          <ambiente>2</ambiente>
          <tipoEmision>1</tipoEmision>
          <razonSocial>Servicios de Telecomunicaciones SETEL S.A.</razonSocial>
          <nombreComercial>Setel</nombreComercial>
          <ruc>1791847652001</ruc>
          <claveAcceso>0105202001179184765200120010010144295491442954919</claveAcceso>
          <codDoc>01</codDoc>
          <estab>001</estab>
          <ptoEmi>001</ptoEmi>
          <secuencial>014429549</secuencial>
          <dirMatriz>AV. ELOY ALFARO N44-406 Y DE LAS HIGUERAS EDIF.GRUPO TVCABLE</dirMatriz>
        </infoTributaria>
        <infoFactura>
          <fechaEmision>01/05/2020</fechaEmision>
          <contribuyenteEspecial>1308</contribuyenteEspecial>
          <obligadoContabilidad>SI</obligadoContabilidad>
          <tipoIdentificacionComprador>04</tipoIdentificacionComprador>
          <razonSocialComprador>INMOBILIARIA VINMOBI CIA LTDA</razonSocialComprador>
          <identificacionComprador>0190332799001</identificacionComprador>
          <direccionComprador>AZUAY - CUENCA - LAS PENCAS II - URBANO | AV. ORDOÑEZ LAZO #S/N Y DE LA HIGUERILLA |</direccionComprador>
          <totalSinImpuestos>186.90</totalSinImpuestos>
          <totalDescuento>0.00</totalDescuento>
          <totalConImpuestos>
            <totalImpuesto>
              <codigo>2</codigo>
              <codigoPorcentaje>2</codigoPorcentaje>
              <baseImponible>186.90</baseImponible>
              <tarifa>12.00</tarifa>
              <valor>22.43</valor>
            </totalImpuesto>
          </totalConImpuestos>
          <propina>0.00</propina>
          <importeTotal>209.33</importeTotal>
          <moneda>DOLAR</moneda>
          <pagos>
            <pago>
              <formaPago>20</formaPago>
              <total>209.33</total>
              <plazo>10</plazo>
              <unidadTiempo>dias</unidadTiempo>
            </pago>
          </pagos>
        </infoFactura>
        <detalles>
          <detalle>
            <codigoPrincipal>940-0000012-500034</codigoPrincipal>
            <descripcion>Servicio Internet Corporativo - TVCABLE PROFESIONAL 120 F 2:1</descripcion>
            <cantidad>1.00</cantidad>
            <precioUnitario>185.90</precioUnitario>
            <descuento>0.00</descuento>
            <precioTotalSinImpuesto>185.90</precioTotalSinImpuesto>
            <detallesAdicionales>
              <detAdicional nombre="Desde" valor="0"/>
              <detAdicional nombre="Hasta" valor="0"/>
              <detAdicional nombre="Categoria" valor="INTERNET|(IVA)"/>
            </detallesAdicionales>
            <impuestos>
              <impuesto>
                <codigo>2</codigo>
                <codigoPorcentaje>2</codigoPorcentaje>
                <tarifa>12.00</tarifa>
                <baseImponible>185.90</baseImponible>
                <valor>22.31</valor>
              </impuesto>
            </impuestos>
          </detalle>
        </detalles>
      </factura>
    ]]>
  </comprobante>
  <mensajes/>
</autorizacion>

这是 xml 的一部分,所以我需要将 CDATA 中的值(如<ruc><razonSocial>等)放入文本框中。 我使用此代码读取 CDATA 之外的数据,并且运行良好。

string Ruta = "";
            OpenFileDialog EscogerRuta = new OpenFileDialog { Filter = "XLM (*.xml)|*.xml", FilterIndex = 1, Multiselect = false };
            if (EscogerRuta.ShowDialog() == DialogResult.OK)
                Ruta = EscogerRuta.FileName;
            if (Ruta != "")
            {
                XmlDocument Documento = new XmlDocument();
                Documento.Load(Ruta);

                string valor = Documento.DocumentElement.SelectSingleNode("/autorizacion/estado").InnerText;
                if (valor == "AUTORIZADO")
                {
                    TxtAutorizacion.Text = Documento.DocumentElement.SelectSingleNode("/autorizacion/numeroAutorizacion").InnerText;
                }
            }

您需要两个解析步骤。 首先像往常一样解析外部文档。 这将创建一棵树,其中comprobante的内容包含在单个文本节点中。 获取该文本节点的字符串值,调用XML解析器解析为XML; 所以你现在有一个内部解析的 XML 文档,你可以用通常的方式导航。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM