0

如何在 C# 中将其更改为流式传输后读取不规则的 xml 字符串?

这是我到目前为止的代码:

string modoEntrada = "01";
string xml= "";

xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
xml += "<Transaccion xmlns=\"http://www.prosa.com.mx/xsd/\">";
//xml = "<Transaccion>";
xml += "<autorizacionRequest>";
xml += "<modoEntrada>" + modoEntrada + "</modoEntrada>"; //target
xml += "</autorizacionRequest>";
xml += "</Transaccion>";
xml.Replace(" ","_");

byte[] byteArray = Encoding.UTF8.GetBytes(xml);
Stream stream = new MemoryStream(byteArray);

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(stream);
XmlNode x = xmldoc.SelectSingleNode("/autorizacionRequest/modoEntrada");

问题是:x == null

它适用于<Transaccion>而不是<Transaccion xmlns="http://www.prosa.com.mx/xsd">.

4

2 回答 2

2

添加一个命名空间管理器并在您的 xpath 中使用它

  XmlDocument xmldoc = new XmlDocument();
  xmldoc.Load(stream);

  var xmlNsM = new XmlNamespaceManager(xmldoc.NameTable);
  xmlNsM.AddNamespace("tr", @"http://www.prosa.com.mx/xsd/");

  XmlNode x = xmldoc.SelectSingleNode("/tr:Transaccion/tr:autorizacionRequest/tr:modoEntrada", xmlNsM );
于 2013-10-07T20:19:16.393 回答
0

令牌是我正在寻找的字符串:

switch (Token)
{

   case "modoEntrada":

      Regex exp_01 = new Regex("<descripcion>(?<arg>[A-Z]+)?</descripcion>");             
      m = exp_01.Match(InputText);
      break;

   case "descripcionRechazo":

      Regex exp_02 = new Regex("<descripcionRechazo>(?<arg>[A-Z ]+)?</descripcionRechazo>");
      m = exp_02.Match(InputText);
      break;
   ...
}

if (m.Success)
   ret = m.Groups["arg"].Value;
else
   ret = "";

return ret;
于 2014-03-14T18:40:23.917 回答