0

XPathNavigator.Selectメソッドを使用して、ネストされた要素内から人の名前とIDを選択する述語を持つXPath式があります。

これは機能します:

root/all_clients/client/client_name_and_ID[client_ID = 'xxx']

これも機能します:

root/all_clients/client[client_name_and_ID/client_ID = 'xxx']/client_name_and_ID

述語を次のレベルに持っていくと、機能しません。

root/all_clients[client/client_name_and_ID/client_ID = 'xxx']/client/client_name_and_ID

フィルタリングは取得しませんが、セット全体を取得します。

これは、XPathまたはASP.NETに固有の制限によるものですか、それとも私が愚かなことをしているためですか?

以下は、関連するXMLファイルの抜粋です。

<?xml version="1.0" encoding="utf-8"?>

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="file:///n:\Projects\XML\Medical\Example_01.xsd">

<all_clients>

    <client>
        <client_name_and_ID>
            <first_name>Fred</first_name>
            <middle_name>James</middle_name>
            <last_name>Bowman</last_name>
            <client_ID>1</client_ID>
        </client_name_and_ID>
    </client>

    <client>
        <client_name_and_ID>
            <first_name>Mark</first_name>
            <middle_name>David</middle_name>
            <last_name>Colder</last_name>
            <client_ID>2</client_ID>
        </client_name_and_ID>
    </client>

    <client>
        <client_name_and_ID>
            <first_name>Joe</first_name>
            <last_name>Lewis</last_name>
            <client_ID>3</client_ID>
        </client_name_and_ID>
    </client>

    <client>
        <client_name_and_ID>
            <first_name>Sam</first_name>
            <last_name>Plank</last_name>
            <client_ID>4</client_ID>
        </client_name_and_ID>
    </client>
</all_clients>

</root>
4

2 に答える 2

0

最後のクエリは、その下に一致するクライアントを含むall_clients要素を一致させています。次に、フィルターを適用せずにこのall_clientsの下のクライアントを選択するため、すべてのクライアント要素を選択します。

XPathの最後のフィルターを保存する必要があります。まず、必要な要素のタイプを選択してから、それらの要素にフィルターを適用します。これらのXPathを試してください。

<!-- Select client_ID element. -->
root/all_clients/client/client_name_and_ID/client_ID[. = 'xxx']

<!-- Select client_name_and_ID element. -->
root/all_clients/client/client_name_and_ID[client_ID = 'xxx']

<!-- Select client element. -->
root/all_clients/client[client_name_and_ID/client_ID = 'xxx']
于 2011-02-11T18:18:28.047 に答える
0

それは正常です。すべてclientのノードはノードの子ですall_clients。したがって、それは常に、あなたがコーディングしたものである「all_clients子孫の少なくとも1つの一致を持っているという名前のすべての要素」の条件に適合します。client/client_name_and_ID/client_ID = 'xxx'

于 2011-02-11T18:19:00.230 に答える