无法在文档上按预期使用xpath

时间:2015-02-10 19:18:11

标签: c# xml xpath

我有以下XML文档

<?xml version="1.0" encoding="utf-8"?>
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
  <EnvelopeVersion>2.0</EnvelopeVersion>
  <Header>
    <MessageDetails>
      <Class>
      </Class>
      <Qualifier>request</Qualifier>
      <Function>submit</Function>
      <CorrelationID />
      <Transformation>
      </Transformation>
      <GatewayTest>0</GatewayTest>
    </MessageDetails>
    <SenderDetails>
      <IDAuthentication>
        <SenderID>
        </SenderID>
        <Authentication>
          <Method>clear</Method>
          <Role>principal</Role>
          <Value></Value>
        </Authentication>
      </IDAuthentication>
    </SenderDetails>
  </Header>
  <GovTalkDetails>
    <Keys>
      <Key Type="TaxOfficeNumber">
      </Key>
      <Key Type="TaxOfficeReference">
      </Key>
    </Keys>
    <TargetDetails>
      <Organisation>IR</Organisation>
    </TargetDetails>
    <ChannelRouting>
      <Channel>
        <URI>
        </URI>
        <Product></Product>
        <Version>
        </Version>
      </Channel>
      <timestamp>
      </timestamp>
    </ChannelRouting>
  </GovTalkDetails>
  <Body>
    <IRenvelope xmlns="">
      <IRheader>
        <Keys>
          <Key Type="TaxOfficeNumber">
          </Key>
          <Key Type="TaxOfficeReference">
          </Key>
        </Keys>
        <PeriodEnd>
        </PeriodEnd>
        <DefaultCurrency>GBP</DefaultCurrency>
        <IRmark>
        </IRmark>
        <Sender>Employer</Sender>
      </IRheader>
    </IRenvelope>
  </Body>
</GovTalkMessage>

我正在使用XMLDocument将其加载到XMLDocument.load()

现在,当我针对它运行xpath查询时,他们没有按照我的预期做出响应,我似乎无法找到原因,我使用了XPath Visualiser工具并且它显示了例如// Keys / Key应该返回4个节点< / p>

当我运行以下c#

document.SelectNodes(@"//Keys/Key") it returns 2 nodes not the expected 4.

当我运行以下

document.SelectNodes(@"//Header") it returns 0 nodes

还要运行

document.SelectNodes(@"GovTalkMessage") returns 0 nodes.

所有建议和帮助都很受欢迎。

由于

1 个答案:

答案 0 :(得分:0)

XPath需要名称空间。您尝试选择的标签是一个,因此您必须告诉选择要查找的位置。