【问题标题】:Get version attribute from a XmlDocument从 XmlDocument 获取版本属性
【发布时间】:2017-03-03 18:50:04
【问题描述】:

我在 XmlDocument 中有这个 xml:

<eventoMDFe xmlns="http://www.portalfiscal.inf.br/mdfe" versao="1.00">
  <infEvento Id="ID1101123317030328245800017958028000040030191042909301">
    <cOrgao>33</cOrgao>
    <tpAmb>2</tpAmb>
    <CNPJ>03282458000179</CNPJ>
    <chMDFe>33170303282458000179580280000400301910429093</chMDFe>
    <dhEvento>2017-03-03T13:27:52</dhEvento>
    <tpEvento>110112</tpEvento>
    <nSeqEvento>1</nSeqEvento>
    <detEvento versaoEvento="1.00">
      <evEncMDFe>
        <descEvento>Encerramento</descEvento>
        <nProt>933170000001722</nProt>
        <dtEnc>2017-03-03</dtEnc>
        <cUF>33</cUF>
        <cMun>3305802</cMun>
      </evEncMDFe>
    </detEvento>
  </infEvento>
</eventoMDFe>

而且我需要从 eventtoMDFe 获取属性值versao。在这种情况下,我需要值“1.00”。

如何获得该属性值? 我已经尝试过类似的方法:

    XmlNodeList elementList = pXml.GetElementsByTagName("infEvento");
    for (int i = 0; i < elementList.Count; i++)
    {
        versaoMDFe = elementList[i].Attributes["versao"].Value;
    }

没有成功...

【问题讨论】:

  • 我在之前的方法中使用“eventoMDFe”而不是“infEvento”得到了预期的结果。但我不喜欢使用循环的解决方案。也许是更好的解决方案?
  • 你使用什么语言?
  • 您好!我正在使用 C#

标签: xml attributes version xmldocument


【解决方案1】:

有几种方法可以在不循环的情况下获取值。这取决于文档的结构。例如,如果您只有一个 &lt;eventoMDFe&gt; 元素,那么您可以执行以下任何操作。

string xml = @"<eventoMDFe xmlns='http://www.portalfiscal.inf.br/mdfe' versao='1.00'>
  <infEvento Id='ID1101123317030328245800017958028000040030191042909301'>
    <cOrgao>33</cOrgao>
    <tpAmb>2</tpAmb>
    <CNPJ>03282458000179</CNPJ>
    <chMDFe>33170303282458000179580280000400301910429093</chMDFe>
    <dhEvento>2017-03-03T13:27:52</dhEvento>
    <tpEvento>110112</tpEvento>
    <nSeqEvento>1</nSeqEvento>
    <detEvento versaoEvento='1.00'>
      <evEncMDFe>
        <descEvento>Encerramento</descEvento>
        <nProt>933170000001722</nProt>
        <dtEnc>2017-03-03</dtEnc>
        <cUF>33</cUF>
        <cMun>3305802</cMun>
      </evEncMDFe>
    </detEvento>
  </infEvento>
</eventoMDFe>";

var doc = new XmlDocument();
doc.LoadXml(xml);

// Using XPath
var versaoMDFe = doc.SelectSingleNode("//@versao").Value;

// Using a slight modification to what you are currently doing
var versaoMDFe = doc.GetElementsByTagName("eventoMDFe")[0].Attributes["versao"].Value

// Yet another way
var versaoMDFe = doc.LastChild.Attributes["versao"].Value;

【讨论】:

  • 我使用了第二种解决方案,对我正在做的事情稍作修改。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2012-01-22
相关资源
最近更新 更多