从 XmlDocument 获取版本属性

Get version attribute from a XmlDocument

我在 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>

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

我怎样才能得到那个属性值? 我已经尝试过类似的东西:

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

并没有工作...

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

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;