Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / XML - XPath / 11 сообщений из 11, страница 1 из 1
30.08.2005, 21:04
    #33242191
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
как получить выражение XPath, для конкретного узла XML документа
...
Рейтинг: 0 / 0
31.08.2005, 11:38
    #33242964
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
наверное криво задал вопрос. поясню зачем надо:
необходимо получить путь (xpath) для конокретного узла (XMLElement) в заданом XMLDocument

пс. извините за оффтоп
...
Рейтинг: 0 / 0
31.08.2005, 13:33
    #33243381
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
более конкретно поясню:
есть XMLElement, принаделжащий XMLDocument. Необходимо для этого элемента найти такой строковый идентификатор, что бы была возможность получить этот же элемент из документа по нему...
...
Рейтинг: 0 / 0
31.08.2005, 13:36
    #33243390
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
я понимаю что RTFM, но ж... со временем, поверхностное знакомство в msdn не особо помогло, так что решил обратиться за помощью к людям знающим.. надеюсь такие присутствуют
...
Рейтинг: 0 / 0
31.08.2005, 15:03
    #33243676
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
Ещё раз медленно объясните чего хочется. Желательно с куском кода.
...
Рейтинг: 0 / 0
31.08.2005, 20:27
    #33244524
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
вот пример, но могут ошибки быть, м.б. я не учел всех возможных вариантов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
protected override void OnLoad(EventArgs e)
		{

			string str = 
			"<root>" + 
				">"2\"/root/node1[1]/@att1"1\">" +
					"<target>val</target>" + 
				 "</node1>" + 
				"<node1 att1=\"12\" att2=\"21\">" +
					"<node1 att1=\"12\" att2=\"21\">" +
						"<target>val</target>" + 
					"</node1>" + 
					"<node1 att1=\"12\" att2=\"21\">" +
						"<target>val</target>" + 
					"</node1>" + 
				"</node1>" + 
			"</root>";
			
			XmlDocument doc = new XmlDocument();
			doc.LoadXml(str);

			XmlNode node1 = doc.SelectSingleNode("/root/node1[1]/target[1]");
			XmlNode node2 = doc.SelectSingleNode("/root/node1[1]/@att1");
			XmlNode node3 = doc.SelectSingleNode("/root/node1[1]/@att2");
			XmlNode node4 = doc.SelectSingleNode("/root/node1[2]/node1[2]/target[1]");
			XmlNode node5 = doc.SelectSingleNode("/root/node1[2]/node1[1]/@att1");	
			XmlNode node6 = doc.SelectSingleNode("/root/node1[2]/node1[2]/@att2");
			 
			Debug.WriteLine(GetPath(node1));
			Debug.WriteLine(GetPath(node2));
			Debug.WriteLine(GetPath(node3));
			Debug.WriteLine(GetPath(node4));
			Debug.WriteLine(GetPath(node5));
			Debug.WriteLine(GetPath(node6));

			base.OnLoad (e);
		}
	
		private string GetPath(XmlNode node)
		{

			StringBuilder sb = new StringBuilder();
			XmlNodeList anc = node.SelectNodes("ancestor-or-self::node()");

			int count = anc.Count;

			if (count >  0 )
			{
				sb.Append("/");
			}

			for(int i =  1 ; i < count; i++)
			{

				int order =  1 ;

				XmlNode ps = anc[i].PreviousSibling;

				for (; ps != null; ps = ps.PreviousSibling)
				{
					order++;
				}

				if(anc[i].NodeType == XmlNodeType.Element)
				{
					sb.Append(anc[i].Name);
					if(i !=  1 )
					{
						sb.Append("[" + order + "]");
					}
					if(i != (count- 1 ))
					{
						sb.Append("/");
					}
				}
				else
				{
					sb.Append("@" + anc[i].Name);
				}
			}
		
			return sb.ToString();
		}
...
Рейтинг: 0 / 0
31.08.2005, 20:29
    #33244528
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
сэмпл немного изудовало при добавлении, я не виноват, думаю и так ясно
...
Рейтинг: 0 / 0
31.08.2005, 21:18
    #33244557
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
greenapple, круто, только я был уверен что есть готовая функция для получения пути...
огромное спасибо, на первый взгляд то что надо.
...
Рейтинг: 0 / 0
31.08.2005, 21:29
    #33244560
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
да, еще вопросик (дабы не плодить офтоных тем спрошу здесь):
есть ли для xml функция на подобее HtmlEncode/UrlEncode что бы записать зарезервированные символы
...
Рейтинг: 0 / 0
01.09.2005, 17:30
    #33246858
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
нет, такой функции нет, да и зачем, путь суть относительно конкретного узла, в данном случае абсолютного пути - корня. Т.е. эта функция вернет абсолютный путь с использованием proximity position в качестве предикатов, а путей на самом деле гораздо больше.

если использовать свойство InnerText, то там кодируются символы,
можно использовать те же HtmlEncode, HTML тоже XML,
а если не поможет, вставлять в CDATA секцию
...
Рейтинг: 0 / 0
01.09.2005, 21:06
    #33247160
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML - XPath
greenapple, еще раз спасибо за разъяснения
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / XML - XPath / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]