[xpath] получение строкового значения узла
//node/text
Можно также string(/Lala)
в этом случае выдается #text, а я хочу сам текст, а не текстовую ноду
это вообще не работает
Как ты это используешь?
ps
покажи как ты выполняешь запросы.
высказал предположение, что ты делаешь не string(/node а string(/Lala). У меня в посте написано не то название вершины =)
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. Надо понимать, что если у тебя несколько вершин, удовлетворяющих запросу, то вернется строковое значение первой.
Тут же все написано:
Exception: Expression must evaluate to a node-set.Можно указывать только те xpath выражения, которые возвращают node-set.
Указанное выше выражение возвращает строку, в соответствие со спецификацией xpath.
т.е. ты понял, что надо было смотреть InnerText, а не Name?
Программа не моя - я не обратил внимание на то, что именно выводится в консоль
Оставить комментарий
koly
Можно ли как-нибудь получить строковое значение узла в xpath ?Например:
<node>
string representation
</node>
я хочу, чтобы выполнение волшебного запроса xpath вернуло "string representation"