কোনও উপাদানটির নবম উদাহরণ পেতে এক্সপাথ ক্যোয়ারী


134

একটি এইচটিএমএল ফাইল রয়েছে (যার বিষয়বস্তুগুলি আমি নিয়ন্ত্রণ করি না) inputএর একই নির্দিষ্ট idবৈশিষ্ট্যযুক্ত কয়েকটি উপাদান রয়েছে "search_query"। ফাইলের বিষয়বস্তুগুলি পরিবর্তন করতে পারে তবে আমি জানি যে আমি সর্বদা inputআইডি বৈশিষ্ট্য সহ দ্বিতীয় উপাদানটি পেতে চাই "search_query"

এটি করার জন্য আমার এক্সপথ এক্সপ্রেশন দরকার। আমি চেষ্টা করেছি //input[@id="search_query"][2]কিন্তু কাজ করে না। এখানে এক্সএমএল স্ট্রিংয়ের উদাহরণ রয়েছে যেখানে এই ক্যোয়ারীটি ব্যর্থ হয়েছে:

<div>
  <form>
    <input id="search_query" />
   </form>
</div>

<div>
  <form>
    <input id="search_query" />
  </form>
</div>

<div>
  <form>
    <input id="search_query" />
  </form>
</div>

মনে রাখবেন যে উপরেরটি নিছক একটি উদাহরণ এবং অন্যান্য এইচটিএমএল কোডটি বেশ আলাদা হতে পারে এবং inputউপাদানগুলি কোনও সামঞ্জস্যপূর্ণ নথি কাঠামো ছাড়াই যে কোনও জায়গায় উপস্থিত হতে পারে (এ ছাড়া আমি নিশ্চিত যে সেখানে সর্বদা inputআইডি বৈশিষ্ট্যযুক্ত কমপক্ষে দুটি উপাদান থাকবে "search_query")।

সঠিক এক্সপাথ এক্সপ্রেশনটি কী?


ভাল প্রশ্ন, +1। সমস্যার সম্পূর্ণ ব্যাখ্যা এবং পছন্দসই সমাধানের জন্য আমার উত্তর দেখুন।
দিমিত্রে নোভাচেভ

7
গৌণ বিন্দু: প্রদত্ত আইডি সহ আপনার কখনও একাধিক উপাদান থাকা উচিত নয় (এবং সুতরাং প্রশ্নের HTML আসলে অবৈধ)। অনুশীলনে, ব্রাউজারগুলি আপনাকে যাইহোক এটি করতে দেয়, তবে আপনি যদি আইডি ব্যবহারের একমাত্র উপকারটি হারিয়ে ফেলেন তবে এটি হ'ল তারা "আমি অদ্বিতীয়" (যেখানে ক্লাসগুলি অ-ব্যবহার করার জন্য ডিজাইন করা হয়েছে অনন্য স্বাক্ষরকারী)।
মেশিনঘস্ট

উত্তর:


244

এটি একটি FAQ :

//somexpression[$N]

মানে হলো "দ্বারা নির্বাচিত যে নোড খুঁজুন //somexpressionযে $Nতার পিতা বা মাতা এর ম সন্তান"।

আপনি যা চান তা হ'ল :

(//input[@id="search_query"])[2]

মনে রাখবেন : সংক্ষেপের []চেয়ে অপারেটরের উচ্চতর অগ্রাধিকার (অগ্রাধিকার) থাকে //


6
আমি এই উত্তর পছন্দ। আমি কোনও অগ্রাধিকারের বিষয়টি বিবেচনা করি নি (আমি কেবল বাম-থেকে-ডানদিকে অগ্রাধিকার গ্রহণ করেছি)।
rlandter

10
@ আরল্যান্ডার: "অগ্রাধিকার" শব্দটি বিভ্রান্তিকর হতে পারে। অবিশ্বাস্যরূপটি //input[@id='search_query'][2]হ'ল:/descendat-or-self::node()/child::input[attribute::id='search_query'][position()=2]

21
গুগল থেকে যারা এখানে এসেছেন তাদের জন্য - সংখ্যাটি 1 থেকে শুরু হয় [1] প্রথম উপাদান হ'ল এবং আরও
জ্যান ম্যারেস

অদ্ভুত যে এই এক্সপাথের প্রশ্নের মধ্যে এই ধরণের অ্যারেগুলি 1 দিয়ে শুরু হয়, আমাকে বিভ্রান্ত করে।
Ivotje50

@ আইভোটজে 50 হ্যাঁ এক্সপথ সিকোয়েন্সগুলি এবং অ্যারেগুলি 1-ভিত্তিক
দিমিত্রে নোভাচাচেভ

21

এটি কাজ করে বলে মনে হচ্ছে:

/descendant::input[@id="search_query"][2]

আমি মাইকেল ম্যাসেজের "এক্সএসএলটি ২.০ এবং এক্সপথ ২.০ প্রোগ্রামার রেফারেন্স, চতুর্থ সংস্করণ" থেকে এটি যাচ্ছি।

এক্সএমএল পাথ ল্যাঙ্গুয়েজ স্পেসিফিকেশন http://www.w3.org/TR/xpath/#path-abbrev এর "অ্যাব্রেভিয়েটেড সিনট্যাক্স" বিভাগে একটি নোটও রয়েছে যা একটি ক্লু সরবরাহ করেছিল।


এই উত্তরের জন্য অনেক ধন্যবাদ। আমার ক্ষেত্রে গৃহীত সমাধানটি কাজ করবে না কারণ আমি রোবট কাঠামোর ক্ষেত্রে এক্সপথ ব্যবহার করছি, যা বন্ধনী দিয়ে শুরু হওয়া পথগুলি গ্রহণ করবে না। এই তবে, কৌশলটি করা উচিত
dahui
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.