0

ノード「nfeStatusServicoNF2Result」を選択するにはどうすればよいですか? 以下のコードを試してみましたが、selectNodes の結果はゼロです。

コードのサンプル

lXMLDoc := CoDOMDocument50.Create;
try
  lXMLDoc.loadXML(lRespose.DataString);

  lXMLDoc.setProperty('SelectionNamespaces', 'xmlns:n="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"');

  lXmlNodes := lXMLDoc.selectNodes('n:nfeStatusServicoNF2Result');
  if lXmlNodes.length = 0 then
  begin
    lHostError := '';

    lXmlNodes := lXMLDoc.getElementsByTagName('n:Value');
    if lXmlNodes.length > 0 then
      lHostError := lHostError + lXmlNodes.item[0].text;

    lXmlNodes := lXMLDoc.getElementsByTagName('n:Text');
    if lXmlNodes.length > 0 then
      lHostError := lHostError + lXmlNodes.item[0].text;

    if lHostError = '' then
      lHostError := lRespose.DataString;

    raise Exception.Create(lHostError);
  end else
  begin
    Result := RemoveVersaoXML(lXmlNodes.item[0].text);
  end;
finally
  lXMLDoc := nil;
end;

XML ファイル

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
    <nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
      <cUF>31</cUF>
      <versaoDados>2.00</versaoDados>
    </nfeCabecMsg>
  </soap:Header>
  <soap:Body>
    <nfeStatusServicoNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
      <retConsStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
        <tpAmb>2</tpAmb>
        <verAplic>13_0_96</verAplic>
        <cStat>517</cStat>
        <xMotivo>Rejeicao: Falha no schema XML - inexiste atributo versao na tag raiz da     mensagem</xMotivo>
        <cUF>31</cUF>
        <dhRecbto>2013-08-08T17:45:48</dhRecbto>
      </retConsStatServ>
    </nfeStatusServicoNF2Result>
  </soap:Body>
</soap:Envelope>
4

2 に答える 2

1

名前空間リゾルバーをクエリに追加する方法については、次の記事を参照してください。

https://developer.mozilla.org/es/docs/Introduction_to_using_XPath_in_JavaScript

于 2013-08-09T11:05:59.427 に答える
1

一般に、XPath で使用する前に、名前空間プレフィックスを宣言する必要があります。

MSXML では、これは次のようにSelectionNamespacesプロパティを設定することによって行われます。

var
    lXMLDoc   : IXMLDOMDocument3;
begin
  ...
  lXMLDoc.setProperty('SelectionNamespaces', "xmlns:n='http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2'");
  lXMLDoc.selectNodes('//n:nfeStatusServicoNF2Result');
  ...
end;

任意のプレフィックスを選択できますが、プレフィックスを選択する必要があることに注意してください

于 2013-08-09T11:28:01.797 に答える