помогите написать выражение XPath

Raphael
Дата: 28.04.2007 20:12:00
у меня есть обработчик раздела конфигурации из web.config
дотнет ему отдаёт XmlNode
методы SelectSingleNode и ChildNodes работают прекрасно.
но SelectNodes работает только с таким выражением "//nodename"
"./nodeName" - почемуто возвращает 0

m_section.SelecSingleNode("commonRazdel").SelectNodes("./local")



<?xml version="1.0encoding="utf-8?>
<configuration >
    <configSections>
        <section name="MyConfigtype="myNamcpace.SectionHandler,myDll"/>
    </configSections>
    <MyConfig>
        <database>baseName</database>
        <user>sa</user>
        <pass>12345</pass>
        <commonRazdel>
            <page>text.aspx</page>
            <page>front.aspx</page>
            <local ip="127.0.0.1" />
            <local ip="192.15.4." />
            <local ip="255.172.8.2" />
        </commonRazdel>
    </MyConfig>
</configuration>



Dmitryk
Дата: 28.04.2007 21:51:40
Скорее всего "commonRazdel" не виден оттуда, откуда вы его пытаетесь выделить. Попробуйте такое выражение: configuration/MyConfig/commonRazdel или MyConfig/commonRazdel
 Бесплатный windows хостинг без баннера http://winhost.kiev.ua
Raphael
Дата: 30.04.2007 20:08:00
Скорее всего "commonRazdel" не виден оттуда, откуда вы его пытаетесь выделить. Попробуйте такое выражение: configuration/MyConfig/commonRazdel или MyConfig/commonRazdel

m_section.SelecSingleNode("commonRazdel") - это выражение верное и возвращает то что нужно.

если взять m_section.SelecSingleNode("commonRazdel").ChildNodes
и пройтись по нему foreach-ом отсеять нужные мне узлы. то срабатывает как и
m_section.SelecSingleNode("commonRazdel").SelectNodes("./nodeName") - (если бы)
но ни форыч мне кажется портит всю красоту кода, а два слеша в пути не безопасны, приходится придумывать сложные имена чтобы точно нигде более не использовались.

а пока работает так m_section.SelectNodes("//nodeName")
Raphael
Дата: 30.04.2007 20:16:00
почитав мсдн, понял что надо прописывать наймспейс, но в web.config'e это неприемливо. а все примеры в мсдн только с наймспейсвми.
prokhorovserge
Дата: 30.04.2007 21:24:32
Попробуйте m_section.SelecSingleNode("//*[local-name() = 'commonRazdel']")
Serge
Raphael
Дата: 02.05.2007 13:32:00
Попробуйте m_section.SelecSingleNode("//*[local-name() = 'commonRazdel']")

как я уже написал в другом сообщении работает так m_section.SelectNodes("//nodeName")

кто нибудь может мне объяснить как правильно писать выражения XPath для .NET
и почему не работает m_section.SelecSingleNode("commonRazdel").SelectNodes("./local")

а два слеша в начале выберут мне узлы с таким же именем не только из моего раздела но и из всех других.