【问题标题】:.net System.XML SelectSingleNode when child elements haven't got namespace当子元素没有命名空间时.net System.XML SelectSingleNode
【发布时间】:2018-10-24 12:22:57
【问题描述】:

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

【问题讨论】:

  • 您可以使用 LINQ to XML 代替吗?这往往会使命名空间的工作变得更加简单。

标签: .net xml system.xml


【解决方案1】:

找到解决方案,只需要为我的子元素添加自定义命名空间。

所以最后的代码是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2014-02-19
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多