Я пытаюсь изучить 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, и они хорошо выглядят.
Возможно, XML не тот, который вы опубликовали, но имеет объявление пространства имен по умолчанию. Это основная причина, по которой выражения XPath, написанные новичками, не выбирают то, что они хотят выбрать. В этом случае вам понадобится XmlNamespaceManager http://msdn.microsoft.com/en-us/library/6k4x060d.aspx
Я бы выбрал классический учебник W3Schools . Вот как я научился, и мне это помогло. Определенно охватывает все основы.
http://www.w3schools.com/xsl/xpath_intro.asp
Вверху есть руководство, а также ссылка на xpath.
Я всегда находил этот учебник / справочник очень полезным ... http://zvon.org/comp/r/tut-XPath_1.html#
ОБНОВЛЕНИЕ
Я использовал ваш код и XML-документ и смог без проблем получить целевые элементы. Мне пришлось закрыть ваши элементы ,
в конце вашего XML-документа, но я предполагаю, что это проблема вырезания и вставки. Я предполагаю, что мой вопрос будет (и это слишком очевидно), уверены ли вы, что XML-документ загружается и что тот, который загружается, действительно имеет контент, который вы хотите? Я скопировал ваш XML-документ и жестко запрограммировал путь в конструкторе XPathDocument
, и все работало нормально (то есть StringBuilder имел текст из элементов
).
Также пробовали кодировку ANSI и UTF-8 - без проблем.
Я использую VS2010 для своей среды разработки.
Я обнаружил, что учебники по zvon довольно хороши.
Вот руководство XPath .
JQuery поддерживает базовое выражение XPath, вы можете использовать его, чтобы попрактиковаться в написании селекторов XPath.