2010-09-22 96 views
0

我有一些XML:不能得到这个XPath的工作

<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示例doc,但显然我在方括号内出错了 - 帮助!

感谢 罗布

回答

5

两个问题更换... /resRefDate/refDate[ ...

首先,您未能关闭两组方括号,这是无效的标记。其次,你的过滤器表达式(方括号)在错误的地方,它们应该在refDate之前,因为它是你正在过滤的resRefDate。以下是正确的表达。

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

+1正确答案。关键价值中的小错字。此外,可以断线:它使表达更清晰。 – 2010-09-22 13:48:40

+0

就是这样 - 感谢您的帮助! – rob 2010-09-22 13:51:33

0

refDateTyp不refDate,这是通过在查询你的病情表示的子标签。

你应该通过... /resRefDate[ ...

0

貌似你,而不是“refDateTyp”(上月底与“E”)“refDateType”这是我在你的XML片段看到。