无法让这个XPath工作

时间:2010-09-22 13:27:57

标签: c# .net xml xpath

我有一些XML:

<metadata>
  <dataIdInfo>
    <idCitation>
      <resRefDate>
        <refDate>1996</refDate>
        <refDateTyp>
          <DateTypCd value="007" />
        </refDateTyp>
      </resRefDate>
      <resRefDate>
        <refDate>1998</refDate>
        <refDateTypCd>
          <DateTypCd value="003" />
        </refDateTypCd>
      </resRefDate>
    </idCitation>
  </dataIdInfo>
</metadata>

到目前为止,我正试图从密钥007获得1996年的价值

XmlDocument doc = new xmlDocument();
doc.LoadXml(myXmlString);  
XmlNode node = doc.SelectSingleNode("metadata/dataIdInfo/idCitation/resRefDate/refDate[refDateType/DateTypCd[@value=\"007\"]");

但我一直收到地址有无效令牌的错误。我一直在审查msdn上的XPath示例文档,但显然我在方括号部分出了问题 - 求助!

由于 罗布

3 个答案:

答案 0 :(得分:5)

两个问题。

首先,您未能关闭两组方括号,这是无效的令牌。

其次,你的过滤器表达式(方括号)位于错误的位置,它们应该在refDate之前,因为它是你要过滤的resRefDate。以下是正确的表达方式。

metadata/dataIdInfo/idCitation/resRefDate
                                [refDateTyp/DateTypCd/@value="007"]/refDate

答案 1 :(得分:0)

refDateTyp不是refDate的子标签,由查询中的条件表示。

您应该将... /resRefDate/refDate[ ...替换为... /resRefDate[ ...

答案 2 :(得分:0)

看起来你有“refDateType”(末尾带有“e”),而不是我在XML片段中看到的“refDateTyp”。