0

因此尝试从此 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”子元素?

4

1 回答 1

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
于 2018-10-24T12:43:52.607 回答