我有一些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示例文档,但显然我在方括号部分出了问题 - 求助!
由于 罗布
答案 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”。