Использование XPATH для доступа к элементам XML (было: Хороший учебник для изучения xpath)

Я пытаюсь изучить XPath. Теория кажется чрезвычайно простой, за исключением того факта, что она не работает.

Я пытаюсь получить содержимое каждого целевого элемента

XPathDocument doc = new XPathDocument(sPath);
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr;
expr = nav.Compile("/doc/file/body/trans-unit/target");
XPathNodeIterator iterator = nav.Select(expr);

while (iterator.MoveNext())
{
    XPathNavigator nav2 = iterator.Current.Clone();
    sbDoc.Append(nav2.InnerXml);
}

Документ XML выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<doc version="1.2">
  <file original="affiliate.php" source-language="EN-US" target-language="FR-FR" datatype="php">
    <header>
      <skl>
        <external-file href="affiliate.php"/>
      </skl>
    </header>
    <body>
      <trans-unit id="tu1">
        <source xml:lang="EN-US">Your Program Details</source>
        <target xml:lang="FR-FR">Your Program Details</target>
      </trans-unit>
      <trans-unit id="tu2">
        <source xml:lang="EN-US">Status</source>
        <target xml:lang="FR-FR">Status</target>
      </trans-unit>

Это почти дословно из учебника, но я не могу заставить его работать. Когда итератор создан, в режиме отладки я вижу, что документ загружен, но итератор не находит результата и пропускает цикл While.

Возможно, я делаю что-то чрезвычайно глупое, но что?

Кто-нибудь знает, где Я могу найти хороший, надежный учебник по XPATH?


Спасибо всем. Оказывается, я проигнорировал тот факт, что было пространство имен (которое я удалил, упрощая XML-код, поскольку я не осознавал, что это важно), и с добавлением менеджера пространства имен код работает нормально.

Сейчас я изучаю предложенные учебники по XPATH, и они хорошо выглядят.

10
задан Sylverdrag 15 August 2013 в 12:34
поделиться

7 ответов

Возможно, XML не тот, который вы опубликовали, но имеет объявление пространства имен по умолчанию. Это основная причина, по которой выражения XPath, написанные новичками, не выбирают то, что они хотят выбрать. В этом случае вам понадобится XmlNamespaceManager http://msdn.microsoft.com/en-us/library/6k4x060d.aspx

9
ответ дан 3 December 2019 в 14:17
поделиться

Я бы выбрал классический учебник W3Schools . Вот как я научился, и мне это помогло. Определенно охватывает все основы.

9
ответ дан 3 December 2019 в 14:17
поделиться
5
ответ дан 3 December 2019 в 14:17
поделиться

http://www.w3schools.com/xsl/xpath_intro.asp

Вверху есть руководство, а также ссылка на xpath.

3
ответ дан 3 December 2019 в 14:17
поделиться

Я всегда находил этот учебник / справочник очень полезным ... http://zvon.org/comp/r/tut-XPath_1.html#

ОБНОВЛЕНИЕ
Я использовал ваш код и XML-документ и смог без проблем получить целевые элементы. Мне пришлось закрыть ваши элементы , и в конце вашего XML-документа, но я предполагаю, что это проблема вырезания и вставки. Я предполагаю, что мой вопрос будет (и это слишком очевидно), уверены ли вы, что XML-документ загружается и что тот, который загружается, действительно имеет контент, который вы хотите? Я скопировал ваш XML-документ и жестко запрограммировал путь в конструкторе XPathDocument , и все работало нормально (то есть StringBuilder имел текст из элементов ).

Также пробовали кодировку ANSI и UTF-8 - без проблем.

Я использую VS2010 для своей среды разработки.

3
ответ дан 3 December 2019 в 14:17
поделиться

Я обнаружил, что учебники по zvon довольно хороши.

Вот руководство XPath .

3
ответ дан 3 December 2019 в 14:17
поделиться

JQuery поддерживает базовое выражение XPath, вы можете использовать его, чтобы попрактиковаться в написании селекторов XPath.

1
ответ дан 3 December 2019 в 14:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: