如何在XML中获取内部文本 [英] How to get innertext in an XML

查看:69
本文介绍了如何在XML中获取内部文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下XML文件

<?xml version="1.0" encoding="utf-8"?>
<Comprobante version="2.2" serie="A" folio="35207" fecha="2013-05-31T11:51:48">
 <Emisor rfc="" nombre="E">
  <DomicilioFiscal calle="" noExterior="" colonia="" />
  <ExpedidoEn calle="" noExterior="" colonia="" />
  <RegimenFiscal Regimen="Regimen" />
 </Emisor>

 <Receptor rfc="" nombre="Z">
  <Domicilio calle="" noExterior="" colonia="" />
 </Receptor>

 <Conceptos cantidad="1.000" unidad="COMISION" descripcion="PENDIENTE" valorUnitario="28.50000" importe="28.50" />

 <Impuestos totalImpuestosTrasladados="3.14">
  <Traslados>
   <Traslado impuesto="IVA" tasa="11.00" importe="3.14" />
  </Traslados>
 </Impuestos>

 <Addenda>
  <ener:EstadoDeCuentaCombustible xmlns:ener="">
   <ener:cadenaOriginal>||2.2|A|35207|2013-05-31T11:51:48|773463|2011|ingreso|Pago en una sola exhibicion|28.50|31.64|Tarjeta|Tijuana,Baja California|3213|ERE|E S.A. de C.V.|Prol|13351|Anexa e|Tijuana|Tijuana|Baja California|Mexico|22100|Prol|13351|Anexa e|Tijuana|Tijuana|Baja California|Mexico|22100|Regimen|XA|Z||||TIJUANA|TIJUANA|BAJA CALIFORNIA|Mexico||1.000|COMISION|PENDIENTE|28.50000|28.50|IVA|11.00|3.14|3.14||</ener:cadenaOriginal>
   <ener:idRefund>98</ener:idRefund>
  </ener:EstadoDeCuentaCombustible>
 </Addenda>
</Comprobante>

我需要获取里面的文本(那个长字符串)

I need to get the text that is inside (that long string)

这是我启动C#代码的方式

Here's how I start the c# code

XmlDocument doc = new XmlDocument();
doc.Load("Route");

XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);

xnm.AddNamespace("Documento", "http://www.sat.gob.mx/cfd/2");
xnm.AddNamespace("ener", "http://www.enercard.com.mx/cfd");

我尝试了各种方法...

I've tried various ways...

//strOriginalString = doc.DocumentElement.SelectSingleNode("//Documento:Addenda", xnm).FirstChild.SelectSingleNode("//ener:cadenaOriginal", xnm).InnerText;
//strOriginalString = doc.DocumentElement.SelectSingleNode("//Documento:Addenda//ener:EstadoDeCuentaCombustible", xnm).FirstChild.SelectSingleNode("//ener:cadenaOriginal", xnm).InnerText;
//strOriginalString = doc.DocumentElement.SelectSingleNode("//Documento:Addenda/Documento:cadenaOriginal", xnm).InnerXml;

这3种方式总是会引发异常...

this 3 ways always throw an exception...

我发现了另一种不会引发异常但没有得到字符串的方式

I found another way that doesn't throw an exception, but it doesn't get the string

XmlElement root = doc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("/Addenda/EstadoDeCuentaCombustible");
strOriginalString = "";

foreach (XmlNode node in nodes)
{
    XmlNode child = node.SelectSingleNode("./cadenaOriginal");

    if (child != null)
    {
        strOriginalString = child.InnerText;
        break;
    }
}

我做错了什么?还是有另一种方法可以在

What am I doing wrong? or is there another way that I can get the string inside

推荐答案

您的第二次尝试看起来与应该工作的最接近:

Your second attempt looks the closest to what should work:

//strOriginalString = doc.DocumentElement.SelectSingleNode("//Documento:Addenda//ener:EstadoDeCuentaCombustible", xnm).FirstChild.SelectSingleNode("//ener:cadenaOriginal", xnm).InnerText;

但是切换到此(已编辑):

But switch to this(edited):

//strOriginalString = doc.SelectSingleNode("//ener:cadenaOriginal", xnm).InnerText;

这篇关于如何在XML中获取内部文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆