Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / выборка нодов из xml через XPath / 3 сообщений из 3, страница 1 из 1
08.01.2008, 12:34
    #35047917
alexxey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка нодов из xml через XPath
Доброго времени суток... столкнулся с проблемой при обработке XML.
Есть задача прочитать XML и обработать определенные ноды на C# "siteMapNode" - при условии что уровень вложенности нодов может быть достаточно большой (обычно порядка 6-7)

Пример кода
Код: 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.
<?xml version="1.0" encoding="utf-8"?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
  <StyleNodes>
  </StyleNodes>
  <siteMapNode url="~/default.html" name="default">
    <siteMapNodes>
      <siteMapNode name="aboutus" url="~/aboutus.html">
      </siteMapNode>
      <siteMapNode type="custom" name="contactus" url="~/contactus.html">
        <Controls>
          <Control name="ContactUsForm" placeholder="Center">
          </Control>
        </Controls>
      </siteMapNode>
      <siteMapNode type="file" name="sitemap" url="~/sitemap.html">
        <Controls>
          <Control name="SiteMap" placeholder="Center">
          </Control>
        </Controls>
      </siteMapNode>
      ...
  </siteMapNodes>
 </sitemapNode>
 </siteMap>

на данный момент задача решалась путем тупого перебора всех нодов(через XPathNavogator), сравнения их имени на "siteMapNode" и все...но хочется сделать грамотно (тем более что кол-во нодов может быть очень большим). Меня интересуют ноды только типа <siteMapNode>, но выцепить их не могу...

В итоге возникает вопрос - каким должен быть XPathIterator, чтобы выгрести ноды такого типа? Причем насколько понял, тут довольно важную роль играет наличие неймспейса. Интересует в оcновном какое правильное решение будет в двнном случае, а именно что применять, поскольку так выгрести ноды и не получилось
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            modFile.Load(file.FullName);
            XPathNavigator navigator = modFile.CreateNavigator();
            XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
            manager.AddNamespace("sm", "http://schemas.microsoft.com/AspNet/SiteMap-File-1.0");
            navigator.MoveToFirstChild();
            XPathNodeIterator nodes = navigator.Select("/sm:siteMapNode", manager);
            if (nodes.MoveNext())
            {
             ...
             }
Заранее спасибо.
...
Рейтинг: 0 / 0
08.01.2008, 13:55
    #35048036
gedeminas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка нодов из xml через XPath
а так:
Код: plaintext
navigator.Select("//sm:siteMapNode", manager);
...
Рейтинг: 0 / 0
08.01.2008, 17:09
    #35048369
alexxey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка нодов из xml через XPath
Спасибо большое... вот что значит все таки незнание матчасти :)
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / выборка нодов из xml через XPath / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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