[xpath] получение строкового значения узла
//node/text
Можно также string(/Lala)
в этом случае выдается #text, а я хочу сам текст, а не текстовую ноду
это вообще не работает
У меня работает.
Как ты это используешь?
Как ты это используешь?
оба приведенных запроса должны работать.
ps
покажи как ты выполняешь запросы.
ps
покажи как ты выполняешь запросы.
высказал предположение, что ты делаешь не string(/node а string(/Lala). У меня в посте написано не то название вершины =)
Вот код, выполняющий запрос:
Документ:
Запускаю программу, код которой дан выше, с параметром xml документа.
Ввожу:
получаю:
Ввожу:
Получаю:

using System;
using System.Xml;
using System.Xml.Schema;
public class XPathApp {
protected static int messageCount = 0;
public static void Main(string[] args) {
if(args.Length < 1) {
Console.Out.WriteLine("xml file name is not specified");
return;
}
try {
XmlTextReader tr = new XmlTextReader(args[0]);
XmlValidatingReader vr = new XmlValidatingReader(tr);
XmlDocument xmldoc = new XmlDocument;
xmldoc.Load(vr);
Console.Out.Write("Query string:");
string query = Console.In.ReadLine;
XmlNodeList list = xmldoc.SelectNodes(query);
foreach(XmlNode node in list)
Console.WriteLine("{0}",node.Name);
}
catch(Exception exc) {
Console.Out.WriteLine("Exception: " + exc.Message);
}
}
}
Документ:
<?xml version="1.0" encoding="utf-8" ?>
<AdressBook >
<Rec>
<fio>
<SurName>Belov</SurName>
<Name>Vasily</Name>
<FatherName>A</FatherName>
</fio>
<adress>
Moscow, Russia
</adress>
<phone>1456</phone>
<email>
aha.ru
</email>
</Rec>
<Rec>
<fio>
<SurName>Belov</SurName>
<Name>Vasily</Name>
<FatherName>A</FatherName>
</fio>
<adress>
Cwoprty
</adress>
<phone>77777</phone>
<email>
fsdfdsf
</email>
</Rec>
</AdressBook>
Запускаю программу, код которой дан выше, с параметром xml документа.
Ввожу:
//*/text
получаю:
#text
#text
#text
#text
#text
#text
#text
#text
#text
#text
#text
#text
Ввожу:
string(//*)
Получаю:
Exception: Expression must evaluate to a node-set.
высказал предположение, что ты делаешь не string(/node а string(/Lala). У меня в посте написано не то название вершины =)Я почитал спецификацию xpath и немного в нем ориентируюсь

всё, туплю. Это программа такая, что выводит имя узла, а не его значение...
логично, что второй запрос не работает 

class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument;
doc.Load(@"c:\krasin\trash\lala.xml");
XPathNavigator nav = doc.CreateNavigator;
Console.WriteLine(nav.Evaluate("string(/Lala)";
}
}
upd. Надо понимать, что если у тебя несколько вершин, удовлетворяющих запросу, то вернется строковое значение первой.
чювак, ты через XmlDocument работаешь с ДОМ-моделью.
Тут же все написано:
Указанное выше выражение возвращает строку, в соответствие со спецификацией xpath.
Тут же все написано:
Exception: Expression must evaluate to a node-set.Можно указывать только те xpath выражения, которые возвращают node-set.
Указанное выше выражение возвращает строку, в соответствие со спецификацией xpath.
> всё, туплю. Это программа такая, что выводит имя узла, а не его значение...
т.е. ты понял, что надо было смотреть InnerText, а не Name?
т.е. ты понял, что надо было смотреть InnerText, а не Name?
Программа не моя - я не обратил внимание на то, что именно выводится в консоль
Оставить комментарий
koly
Можно ли как-нибудь получить строковое значение узла в xpath ?Например:
<node>
string representation
</node>
я хочу, чтобы выполнение волшебного запроса xpath вернуло "string representation"