因此,尝试从此XML中选择节点“ NumSerieFacturaEmisor”:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns4:RespuestaLRFacturasEmitidas
xmlns:ns4="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/igic/ws/RespuestaSuministro.xsd"
xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/igic/ws/SuministroInformacion.xsd">
<ns4:RespuestaLinea>
<ns4:IDFactura>
<IDEmisorFactura>
<NIF>B44444395</NIF>
</IDEmisorFactura>
<NumSerieFacturaEmisor>FV1810007</NumSerieFacturaEmisor>
<FechaExpedicionFacturaEmisor>24-10-2018</FechaExpedicionFacturaEmisor>
</ns4:IDFactura>
</ns4:RespuestaLinea>
</ns4:RespuestaLRFacturasEmitidas>
</soap:Body>
</soap:Envelope>
使用DotNet System.Xml函数:
XMLNamespaceMgr.AddNamespace('ns4','https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/igic/ws/RespuestaSuministro.xsd');
FoundXMLNodeList = XMLRootNode.SelectNodes('//ns4:RespuestaLinea',XMLNamespaceMgr);
FOR Index := 0 TO FoundXMLNodeList.Count - 1 DO BEGIN
XMLNode := FoundXMLNodeList.Item(Index);
FoundXMLNode := XMLRootNode.SelectSingleNode('//ns4:IDFactura//NumSerieFacturaEmisor',XMLNamespaceMgr);
DocNo := FoundXMLNode.InnerText;
END
因此 XMLRootNode.SelectSingleNode返回null 。我看到的是父元素具有“ ns4”命名空间,但是子元素没有命名空间。我必须更改代码才能选择“ NumSerieFacturaEmisor”子元素吗?
答案 0 :(得分:0)
找到了解决方案,只需要为我的子元素添加自定义名称空间即可。
所以最终的代码是:
XMLNamespaceMgr.AddNamespace('ns4','https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/igic/ws/RespuestaSuministro.xsd');
XMLNamespaceMgr.AddNamespace('custom','https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/igic/ws/SuministroInformacion.xsd');
FoundXMLNodeList = XMLRootNode.SelectNodes('//ns4:RespuestaLinea',XMLNamespaceMgr);
FOR Index := 0 TO FoundXMLNodeList.Count - 1 DO BEGIN
XMLNode := FoundXMLNodeList.Item(Index);
FoundXMLNode := XMLRootNode.SelectSingleNode('//ns4:IDFactura//custom:NumSerieFacturaEmisor',XMLNamespaceMgr);
DocNo := FoundXMLNode.InnerText;
END