এক্সপ্যাথ ব্যবহার করে নির্দিষ্ট বৈশিষ্ট্য সহ প্রথম উপাদানটি কীভাবে নির্বাচন করবেন


300

এক্সপথ bookstore/book[1]নীচে প্রথম বই নোড নির্বাচন করে bookstore

আমি আরও জটিল অবস্থার সাথে মেলে এমন প্রথম নোডটি কীভাবে নির্বাচন করতে পারি, যেমন প্রথম নোড যা মেলে /bookstore/book[@location='US']

উত্তর:


444

ব্যবহার করুন:

(/bookstore/book[@location='US'])[1]

এটি প্রথমে 'ইউএস' এর সমান লোকেশন অ্যাট্রিবিউট সহ বইয়ের উপাদানগুলি পাবে। তারপরে এটি সেট থেকে প্রথম নোডটি নির্বাচন করবে। বন্ধনী ব্যবহারের লক্ষণীয়, যা কিছু বাস্তবায়ন দ্বারা প্রয়োজনীয়।

দ্রষ্টব্য, /bookstore/book[1][@location='US']প্রথম উপাদানটির মধ্যেও যদি লোকেশনটির বৈশিষ্ট্য না ঘটে তবে এটি একই নয় ।


// বইয়ের দোকান / বই [@ অবস্থান = 'মার্কিন'] এর জন্য আমি কীভাবে তা করতে পারি?
আলেকজান্ডার ভি Ilyin

7
এটি 'মার্কিন' থেকে সমস্ত বই পাবেন। (/ বইয়ের দোকান / বই [@ অবস্থান = 'মার্কিন']]] [1] প্রথমটি পাবেন।
কেভিন ড্রাইডার

3
@ কেভিনড্রাইডার /bookstore/book[@location='US'][1]'ইউএস' থেকে সমস্ত বই ফেরত দেয় না। আমি একাধিকবার এবং বিভিন্ন ভাষার এক্সপথ বাস্তবায়নের অধীনে এটি পরীক্ষা করেছি। /bookstore/book[@location='US'][1]একটি বইয়ের দোকানে অধীনে প্রথম 'মার্কিন' বইটি ফেরত দেয়। যদি একাধিক বইয়ের দোকান থাকে, তবে এটি প্রতিটি থেকে প্রথমটি ফিরে আসবে। ওপি এটিই চেয়েছিল (বইয়ের দোকানে প্রথম নোড)। আপনার সংস্করণ সমস্ত বইয়ের দোকান (প্রথম ম্যাচ) থেকে কেবল একটি বই ফেরত দেয়।
জোনাথন ফিংল্যান্ড

3
@ জোনাথানফিংল্যান্ড আপনি ভুল বুঝেছেন - আলেকজান্ডারভি.আইলিনের প্রশ্নের প্রসঙ্গে কেভিনড্রাইডারের উত্তরটি আবার পড়ুন। আপনি উভয় একই জিনিস বোঝা।
kiedysktos

175

/bookstore/book[@location='US'][1] কেবল সাধারণ কাঠামো নিয়ে কাজ করে।

আরও কিছুটা কাঠামো যুক্ত করুন এবং জিনিসগুলি বিরতি দিন।

সঙ্গে

<bookstore>
 <category>
  <book location="US">A1</book>
  <book location="FIN">A2</book>
 </category>
 <category>
  <book location="FIN">B1</book>
  <book location="US">B2</book>
 </category>
</bookstore> 

/bookstore/category/book[@location='US'][1] উৎপাদনের

<book location="US">A1</book>
<book location="US">B2</book>

"আরও জটিল অবস্থার সাথে মেলে এমন প্রথম নোড" নয়। /bookstore/category/book[@location='US'][2]কিছুই না।

প্রথম বন্ধনী দিয়ে আপনি ফলাফলটি পেতে পারেন মূল প্রশ্নটি:

(/bookstore/category/book[@location='US'])[1] দেয়

<book location="US">A1</book>

এবং (/bookstore/category/book[@location='US'])[2]প্রত্যাশার মতো কাজ করে।


11
এখানে গৃহীত উত্তর লেখক। ওপি'র প্রশ্নটি বিবেচিত /bookstore/book[1]এবং তা নয় (/bookstore/book)[1]। আপনার সরবরাহ করা কেসটি ওপি যেমন অনুরোধ করেছে, তেমন নয়। সম্ভবতঃ ওপি আমার উত্তরটি যেমনটি প্রত্যাশা করেছিল তেমনই করেছে (এবং অনুরোধ করেছে) হিসাবে গ্রহণ করেছিল।
জোনাথন ফিংল্যান্ড

প্রদত্ত এই উত্তরটি এই অদ্ভুত মামলার জন্য আমাকে সহায়তা করেছিল। কেউ ব্যাখ্যা করতে পারেন কেন এটি "আরও জটিল পরিস্থিতিগুলি" পরিচালনা করবে না? যেহেতু মূলত এটি দুটি আইটেম সহ একটি তালিকা খুঁজে পায়, [2] কেবল এটি (আমার জগতে) বাছাই করা উচিত
স্কুরপি

আমি এই উত্তরটি নির্বাচিত উত্তরের চেয়ে আরও সঠিক বলে মনে করি, যেমন আমার ক্ষেত্রে আমার আরও জটিল কাঠামো ছিল যেখানে কেবল [1] যোগ করার ফলে একাধিক নোড ফিরে আসে। ধন্যবাদ!
mydoghasworms

2
প্যারেন্টিসেস কাজ করে! এছাড়াও আপনি পরে আরও পথ জুড়তে পারেন (..) [1], মত: '(//div[text() = "'+ name +'"])[1]/following-sibling::*/div/text()'। ক্ষেত্রে অনেক নোড ম্যাচ আছে name
হ্লুং

1
আমি আমার মতামত পরিবর্তন করছি কিছুদূর যাওয়ার পরে, আমি এই উত্তরটি যা বলছিলাম তা পেয়েছি এবং আমি যদি ওপিটির উদাহরণ না দেখি তবে আমি এই পক্ষে ভোট দিয়েছি। আমি মনে করি আমি এই উত্তরের সুরে প্রতিক্রিয়া জানাচ্ছি; যদি @ টক্কুরকি শর্তটি প্রথম নোডের নির্বাচন থেকে আলাদা করার বিষয়ে আরও কিছু ব্যাখ্যা দিতেন, আমি তাৎক্ষণিকভাবে এটি দেখতে পেতাম। জোনফিংল্যান্ডের ক্ষেত্রে সম্ভবত একই অবস্থা।
জেরার্ড ওনিল

51

জোনাথন ফিংল্যান্ডের উত্তরের ব্যাখ্যা হিসাবে:

  • একই প্রিডিকেটে একাধিক শর্ত ( [position()=1 and @location='US']) সম্পূর্ণরূপে সত্য হতে হবে
  • একের পর এক পূর্বাভাসে একাধিক শর্তাবলী ( [position()=1][@location='US']) একের পর এক সত্য হতে হবে
  • এটি বোঝায় যে [position()=1][@location='US']! =[@location='US'][position()=1]
    যখন [position()=1 and @location='US']==[@location='US' and position()=1]
  • ইঙ্গিত: একাকী [position()=1] সংক্ষেপে বলা যেতে পারে[1]

বুলিয়ান অপারেটরগলোকে "সঙ্গে predicates জটিল এক্সপ্রেশন নির্মাণ করতে পারেন and" এবং " or", এবং বুলিয়ান জন্য XPath ফাংশন সঙ্গে not(), true()এবং false()। এছাড়াও আপনি বন্ধনীতে উপ-এক্সপ্রেশন মোড়ানো করতে পারেন।


15

আরও জটিল স্ট্রাক্টেড এক্সএমএল ফাইল বিবেচনায় নিয়ে প্রথম ইংরেজী বইয়ের নোড (পুরো ডকুমেন্টে) সন্ধান করার সবচেয়ে সহজ উপায়, যেমন:

<bookstore>
 <category>
  <book location="US">A1</book>
  <book location="FIN">A2</book>
 </category>
 <category>
  <book location="FIN">B1</book>
  <book location="US">B2</book>
 </category>
</bookstore> 

এক্সপথ এক্সপ্রেশন:

/descendant::book[@location='US'][1]


10
    <bookstore>
     <book location="US">A1</book>
     <category>
      <book location="US">B1</book>
      <book location="FIN">B2</book>
     </category>
     <section>
      <book location="FIN">C1</book>
      <book location="US">C2</book>
     </section>
    </bookstore> 

সুতরাং উপরোক্ত দেওয়া; আপনি প্রথম বইটি নির্বাচন করতে পারেন

(//book[@location='US'])[1]

এবং এটি যে কোনও জায়গাতেই মার্কিন যুক্তরাষ্ট্রে প্রথমটি খুঁজে পাবে। [ক 1]

//book[@location='US']

মার্কিন যুক্তরাষ্ট্রে সমস্ত বই সহ নোড সেটটি ফিরে আসবে। [ক 1, খ 1, C2 এ]

(//category/book[@location='US'])[1]

ডকুমেন্টের যে কোনও জায়গায় কোনও বিভাগে থাকা প্রথম বইয়ের অবস্থান মার্কিন যুক্ত করবে। [খ 1]

(/bookstore//book[@location='US'])[1]

মার্কিন যুক্তরাষ্ট্রে প্রথম বইটি ফেরত পাঠাবে যা মূল উপাদান পুস্তকের দোকানে যে কোনও জায়গায় উপস্থিত রয়েছে; / পুস্তকের ভাণ্ডার অংশকে সত্যই অপ্রয়োজনীয় করে তুলছে। [ক 1]

প্রত্যক্ষ উত্তরে:

/bookstore/book[@location='US'][1]

বইয়ের দোকানে [এ 1] এর অধীনে মার্কিন যুক্তরাষ্ট্রে আপনার বইয়ের উপাদানগুলির প্রথম নোড ফিরিয়ে দেবে

ঘটনাচক্রে যদি আপনি চান, উদাহরণস্বরূপ প্রথম মার্কিন বইটি খুঁজে পেতে যা বইয়ের দোকানে সরাসরি শিশু ছিল না:

(/bookstore/*//book[@location='US'])[1]

4

যদি xpath জটিল হয় বা একই xpath এর সাথে একাধিক নোড উপস্থিত থাকে তবে কাঙ্ক্ষিত নোড পেতে সূচকটি ব্যবহার করুন।

প্রাক্তন:

(//bookstore[@location = 'US'])[index]

আপনি যে নম্বরটি চান তা দিতে পারেন।


2

যদি প্রদত্ত এক্সএমএলে নেমস্পেস সরবরাহ করা থাকে তবে এটি ব্যবহার করা ভাল।

(/*[local-name() ='bookstore']/*[local-name()='book'][@location='US'])[1]


-1

একটি অনলাইন এক্সপথ পরীক্ষকের সহায়তায় আমি এই উত্তরটি লিখছি ... এর
জন্য:

<table id="t2"><tbody>
<tr><td>123</td><td>other</td></tr>
<tr><td>foo</td><td>columns</td></tr>
<tr><td>bar</td><td>are</td></tr>
<tr><td>xyz</td><td>ignored</td></tr>
</tbody></table>

নিম্নলিখিত এক্সপথ:

id("t2") / tbody / tr / td[1]

আউটপুট:

123
foo
bar
xyz

যেহেতু 1 এর অর্থ এমন সমস্ত টিডি উপাদান নির্বাচন করুন যা তাদের নিজস্ব প্রত্যক্ষ পিতামাতার প্রথম সন্তান।
তবে নিম্নলিখিত এক্সপাথ:

(id("t2") / tbody / tr / td)[1]

আউটপুট:

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