التعبير XPath مع المتداول المتعددة
سؤال
أحاول بناء تعبير XPath المعقد الذي سيجيب على الحالة التالية.
من بيانات XML أدناه، إرجاع المستعمل الكيان الذي:
- اسم تسجيل الدخول الخاص به هو "User1."
- اسمه "المستخدم 1."
لديه 2 قيم ملفات التعريف المختلفة التي هي "المشغل أو العامل" و "مشرف"(أنا لا أعرف الطلب الدقيق للأمام)
<user> <login>user1</login> <name>User 1</name> <profile> <value>admin</value> <id>2</id> <description>admin users</description> </profile> <profile> <value>operator</value> <id>1</id> <description>Operator</description> </profile> </user> <user> <login>user2</login> <name>User 2</name> <profile> <value>admin</value> <id>4</id> <description>admins users</description> </profile> <profile> <value>poweruser</value> <id>5</id> <description>power users</description> </profile> </user> </root>
يمكن للشخص الرجاء تقديم مثال لمثل هذه القضية؟
تحرير: إضافة كيان ملف تعريف معقد
المحلول
يجب أن تفعل ما يلي ما كنت بعد:
/root/user[login='user1' and
name='User 1' and
profile='admin' and
profile='operator']
وجود اختبارين ل profile
قد تبدو القيمة غريبة، ولكن كما أن هناك متعددة profile
العقد ثم الحالة ستكون راضية طالما تطابق عقدة واحدة على الأقل من الاختبار.
السبب الذي يمكنك مقارنته profile
مباشرة إلى string
, ، على الرغم من أنها في الواقع node
هل هذا هو string-value
عقدة عنصر هو string-value
من جميع أحفادها المتسللين معا، والتي في هذه الحالة هي مجرد محتويات value
.
إذا profile
تضمن المزيد من العناصر من value
يجب عليك استخدام اختبار مسند أكثر تعقيدا قليلا لتحديد وجود مطابقة profile
عقدة بناء على value
(يجب أن يعمل هذا مع سؤالك المحدث):
/root/user[login='user1' and
name='User 1' and
profile[value='admin'] and
profile[value='operator']]
نصائح أخرى
هنا إجابة أكثر دقة (في الحاضر إجابة جريج الزان لا تحقق من الشرط 3. في المشكلة: user
يجب أن يكون العنصر بالضبط 2 profile
الأطفال):
/*/user
[login='user1'
and
name='User 1'
and
not(profile[3])
and
profile/value='admin'
and
profile/value='operator'
]
افترض users
هو الجذر:
/users/user[login='user1' and name='User 1'
and (profile='admin' and profile='operator')]
/root/user[login='user1' and name='User 1' and profile/value='admin' and profile/value='operator'