Не могу заставить этот XPath работать - PullRequest
0 голосов
/ 22 сентября 2010

У меня есть какой-то 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>

Я пытаюсь получить значение 1996 года от ключа 007, пока у меня есть это

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

Но я продолжаю получатьошибка в том, что адрес имеет неверный токен.Я просматривал пример документа XPath на msdn, но, очевидно, я ошибся в части квадратных скобок - помогите!

Спасибо, Роб

Ответы [ 3 ]

5 голосов
/ 22 сентября 2010

Две проблемы.

Во-первых, вам не удалось закрыть оба набора квадратных скобок, это неверный токен.

Во-вторых, выражение вашего фильтра (квадратные скобки) не в том месте, оно должно быть до refDate, так как это resRefDate, который вы фильтруете.Ниже приведено правильное выражение.

metadata/dataIdInfo/idCitation/resRefDate
                                [refDateTyp/DateTypCd/@value="007"]/refDate
0 голосов
/ 22 сентября 2010

Похоже, у вас есть "refDateType" (с "e" в конце) вместо "refDateTyp", что я вижу в вашем фрагменте XML.

0 голосов
/ 22 сентября 2010

refDateTyp не является подтэгом refDate, на что указывает ваше условие в запросе.

вам, вероятно, следует заменить ... /resRefDate/refDate[ ... на ... /resRefDate[ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...