使用带名称空间的ChildNodes从XML读取值
发布时间:2020-12-16 22:57:10 所属栏目:百科 来源:网络整理
导读:我有2个 XML文件,首先这个工作得很好: ?xml version="1.0" encoding="UTF-8" standalone="yes"?ns3:ConsultarSituacaoLoteRpsResposta xmlns:ns2="http://www.ginfes.com.br/tipos_v03.xsd" xmlns:ns3="http://www.ginfes.com.br/servico_consultar_situaca
我有2个
XML文件,首先这个工作得很好:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns3:ConsultarSituacaoLoteRpsResposta xmlns:ns2="http://www.ginfes.com.br/tipos_v03.xsd" xmlns:ns3="http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_resposta_v03.xsd"> <ListaMensagemRetorno> <ns2:MensagemRetorno> <ns2:Codigo>E172</ns2:Codigo> </ns2:MensagemRetorno> </ListaMensagemRetorno> </ns3:ConsultarSituacaoLoteRpsResposta> 我用来读它的代码是这样的: MyNode := Doc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('MensagemRetorno'); MyValue := MyNode.ChildValues['Codigo']; 问题是我有第二个XML: <?xml version="1.0" encoding="utf-8"?> <ConsultarSituacaoLoteRpsResposta xmlns="http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_consultar_situacao_lote_rps_resposta.xsd"> <ListaMensagemRetorno> <MensagemRetorno> <Codigo xmlns="http://www.issnetonline.com.br/webserviceabrasf/vsd/tipos_complexos.xsd">E156</Codigo> </MensagemRetorno> </ListaMensagemRetorno> </ConsultarSituacaoLoteRpsResposta> 请注意,此XML在“Codigo”节点中具有命名空间,因此我的代码找不到此节点. 我发现从第二个XML读取“Codigo”值的唯一方法是这样的: for I := 0 to MyNode.ChildNodes.Count -1 do begin ChildNode := RetornoNode.ChildNodes[I]; if ChildNode.NodeName = 'Codigo' then Codigo := ChildNode.NodeValue; end; 但我认为应该有更好的方法来做到这一点,因为我仍然不明白为什么第一个代码不适用于第二个XML. 有人可以帮我澄清一下吗? 解决方法
这似乎是
ChildValues 财产的限制
您可以使用其中一个替代值来返回值 MyNode := Doc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('MensagemRetorno'); MyValue :=MyNode.ChildNodes.First.Text; 或使用 MyNode := Doc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('MensagemRetorno'); MyValue:= MyNode.ChildNodes.FindNode('Codigo','http://www.issnetonline.com.br/webserviceabrasf/vsd/tipos_complexos.xsd').Text; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |