এক্সপাথ - এমন একটি উপাদান নির্বাচন করে যা একটি মানের সমান হয়


110

এক্সপথে, আমি এমন উপাদানগুলি নির্বাচন করতে চাই যা নির্দিষ্ট মানের সমান হয়।

এক্সএমএল ডেটা নমুনা:

<aaa id="11" >
    <aaa id="21" >
        <aaa id="31" ></aaa>
        <bbb id="32" >
            <aaa id="41" ></aaa>
            <bbb id="42" ></bbb>
            <ccc id="43" ></ccc>
            <ddd id="44" >qwerty</ddd>
            <ddd id="45" ></ddd>
            <ddd id="46" ></ddd>
        </bbb>
    </aaa>
    <bbb id="22" >
         <aaa id="33" >qwerty</aaa>
         <bbb id="34" ></bbb>
         <ccc id="35" ></ccc>
         <ddd id="36" ></ddd>
         <ddd id="37" ></ddd>
         <ddd id="38" ></ddd>
    </bbb>
    <ccc id="23" >qwerty</ccc>
    <ccc id="24" ></ccc>
 </aaa>

এখন, এক্সপথ ব্যবহার করে:

//ccc[.='qwerty']

আমি সঠিক, প্রত্যাশিত ফলাফল পেয়েছি :

Name    Value
ccc     qwerty

এখন, এক্সপথ ব্যবহার করে:

//aaa[.='qwerty']

আমি অপ্রত্যাশিত ফলাফল পেয়েছি :

Name    Value
aaa      
aaa     qwerty

এবং আমি যা বিশেষভাবে আগ্রহী তা হল সেই মান সহ কোনও উপাদান কীভাবে নির্বাচন করা যায়

জন্য XPath:

//*[.='qwerty']

আমি খুব আজব অপ্রত্যাশিত ফলাফল পেয়েছি :

Name    Value
aaa
bbb
ddd     qwerty
bbb     qwerty
aaa     qwerty
ccc     qwerty

কেউ কী এই ফলাফলগুলি ব্যাখ্যা করতে পারেন এবং আরও প্রত্যাশিত ফলাফল পেতে কীভাবে আমার এক্সপথ এক্সপ্রেশনগুলি ঠিক করবেন?


1
কারণ এক্সপথ এক্সপথের . =চেয়ে পৃথক text() =। দেখুন টেক্সট নোড মিলে স্ট্রিং মান মিলে থেকে ভিন্ন কেন জানতে।
kjhughes

উত্তর:


177

এক্সপাথ অনুমান। উপাদানটির স্ট্রিংয়ের মানটি এর সমস্ত পাঠ্য নোড বংশধরের সংমিশ্রণ (ডকুমেন্ট ক্রমে) হিসাবে সংজ্ঞায়িত করে

এটি "অদ্ভুত ফলাফল" ব্যাখ্যা করে।

"আরও ভাল" ফলাফলগুলি নীচের অভিব্যক্তিগুলি ব্যবহার করে পাওয়া যায়:

//*[text() = 'qwerty']

উপরোক্ত নথিতে প্রতিটি উপাদান নির্বাচন করে যার কমপক্ষে একটি 'পাঠ্য নোড' মান সহ 'কিওয়ার্টি' রয়েছে child

//*[text() = 'qwerty' and not(text()[2])]

উপরোক্ত নথিতে প্রতিটি উপাদান নির্বাচন করে যার কেবল একটি পাঠ্য-নোড শিশু রয়েছে এবং এর মান হ'ল: 'কিওয়ার্টি'।


3
@ আইহার্টগ্রিক: খুশী এটি কাজ করে। কিভাবে গ্রহণ / upvoting সম্পর্কে? এক্সপাথের text()সম্ভাব্য নোড-পরীক্ষাগুলির মধ্যে একটি, যার অর্থ "এটি কি একটি পাঠ্য নোড?" অন্যান্য nodetests হয় comment(), processing-instruction(), বা শুধু node()
দিমিত্রে নোভাচেভ

15

চেষ্টা

//*[text()='qwerty']কারণ .আপনার বর্তমান উপাদান

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.