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