এক্সপ্যাথ ব্যবহার করে কোনও নোড কীভাবে নির্বাচন করবেন যদি ভাইবোন নোডের একটি নির্দিষ্ট মান থাকে?


89

আমার কাছে নিম্নলিখিত নথি রয়েছে:

<a>
  <bb>abc</bb>
  <cc>ccc</cc>
  <dd>ddd</dd>
</a>
<a>
  <bb>zz</bb>
  <cc>1</cc>
  <dd>2</dd>
</a>

আমি এর মান পেতে পারেন <cc>জন্য XPath ব্যবহার করা হয় তবে <bb>হয় zz?


4
সমস্যাটি হ'ল আমি জানি কীভাবে একটি নির্দিষ্ট নোড অ্যাক্সেস করতে হয় তবে আমার যদি কোনও ভাইবোন নির্দিষ্ট মান রাখে তবে কোনও নোড অ্যাক্সেস করার আমার কোনও ধারণা নেই। এটি কি এই / এ / সিসি / ধারণাগুলির মতো (/ a / bb = 'zz') হতে পারে?
HOE SENGKIANG

উত্তর:


101

সকলেই কেন ভাইবোনদের <bb/>খোঁজ নিচ্ছেন তা নিশ্চিত নন, আপনি <a/>' প্রিডিকেট'-এর সাথে প্রিনিকেটের সাথে মেলে এমন উপাদানগুলির জন্যও পরীক্ষা করতে পারেন :

//a[bb/text() = "zz"]/cc/text()

24
"সকলেই কেন ভাইবোনদের
খোঁজ নিচ্ছেন

4
দেখে মনে হচ্ছে আমি আসলে শিরোনামটি পড়িনি। :) উত্তর যাইহোক বৈধ থাকে।
জেনস এরট

4
আপনার ভাইবোনদের জন্যও উত্তর উত্তর। আপনি কেবল একটি *-siblingঅক্ষ ব্যবহার করেন নি । যদিও +1
লার্শ

এটি প্রশ্নের উত্তর দেয় না তবে এটি আমার আসল প্রশ্নের উত্তর দেয় যা আমি খারাপভাবে প্রণয়ন করেছি। ধন্যবাদ!
ব্যবহারকারী 9213

37

আপনার যা দরকার তা হ'ল following-siblingএক্সপথ অক্ষ

//a/bb[text()="zz"]/following-sibling::cc[1]/text()

এক্সপথটি এখানে পরীক্ষা করুন: http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625


4
@ হোয়েসেনগাইকিয়াং: এই উত্তরটি "গ্রহণ" করার জন্য আপনার চেক চিহ্নটি ক্লিক করা উচিত, বা আপনি যে কোনওটিকেই প্রশ্নের উত্তরটি সর্বোত্তম বলে মনে করেন।
লার্শ

23

প্রশ্ন: ভাইবোন নোডের একটি নির্দিষ্ট মান থাকলে এক্সপ্যাথ ব্যবহার করে কোনও নোড কীভাবে নির্বাচন করবেন?
যেহেতু নিম্নলিখিত ভাই-বোন এবং পূর্ববর্তী ভাই-বোনদের জন্য কেবলমাত্র "এক্সপাথ অ্যাক্সেস" রয়েছে, তবে অবস্থানটি স্থির থাকলে আপনি তাদের মধ্যে একটি ব্যবহার করতে পারেন।

তবে আরও ভাল: দেখুন ccপিতামাতার bbমান সহকারে সন্তান রয়েছে 'zz':

//cc[../bb='zz']

6
হয় বা হয় //a[bb = 'zz']/cc
তোমালাক

নিম্নলিখিত-ভাইবোন এবং পূর্ববর্তী-ভাইবোনের জন্য 'কেবল "এক্সপথ অ্যাক্সেস" দ্বারা আপনি কী বোঝাতে চাইছেন তা নিশ্চিত নয়। আপনি কি এই সত্য উল্লেখ করছেন যে সমস্ত ভাইবোনদের জন্য একক অক্ষ নেই?
লার্শ

@ লার্শ: হ্যাঁ দুঃখিত, (আমার খারাপ ইংরেজীটি বলুন :-() - এটিই আমি বলার চেষ্টা করছিলাম ((কারণ প্রশ্নটি ভাইবোনদের ছিল))
hr_117

6

প্রথমত, আপনার উদাহরণটি এক্সএমএল সুগঠিত নয়। এটি উপেক্ষা করে এবং আপনি নিজের উদ্দেশ্যগুলি খুব ভালভাবে বর্ণনা করেন নি (আপনি কোন শর্তে ঠিক কী নির্বাচন করতে চান?), আমি ধরে নিই যে আপনি এটি করতে চান:

//cc[preceding-sibling::bb[text()="zz"]]/text()

এটি নির্বাচন করে

TEXT VALUES OF ALL <CC> ELEMENTS
//cc                                    /text()
    THAT HAVE A PRECEDING SIBLING <BB>
    [preceding-sibling::bb             ]
                          THAT HAS TEXT VALUE EQUAL TO "zz"
                          [text()="zz"]

আপনি লিখতে পারে হিসাবে হয়

//bb[text()="zz"]/following-sibling::cc/text()

দয়া করে তাকান বৈশিষ্ট , এটা কিছু খুব ভাল পাঠযোগ্য হয়েছে উদাহরণ যেখান থেকে আপনি অনেক কিছু শিখতে হবে।


4
@ লার্শ "বৈধ নয়" থেকে "সুগঠিত নয়" থেকে সংশোধনের জন্য ধন্যবাদ। আমি আজ নতুন কিছু শিখেছি।
পেট্রা জেনেয়েক

4
//a/cc[../bb='zz']/text()

// এ: যেখানেই থাকুক না কেন সমস্ত 'ক' উপাদান নির্বাচন করে।

// এ / সিসি: 'সিসি' উপাদানগুলি 'এ' উপাদানের (যে কোনও ক্ষেত্রেই নয়) বাছাই করে Se

..: বর্তমান নোডের পিতামাতাকে নির্বাচন করে।

[../bb='zz ']: যেখানে ভাইবোন' বিবি 'উপাদানটির মান zz।

তথ্যসূত্র: http://www.w3schools.com/xsl/xpath_syntax.asp


4

এই সমস্যার আরেকটি সমাধান হ'ল

//bb[contains(.,'zz')]/../cc/text()

ব্যাখ্যা : এরপরে সমস্ত চাইল্ড নোডগুলিতে স্ট্রিং bbরয়েছে এমন 'zz'যেটির ব্যবহারের bbপ্যারেন্ট নোডে যাচ্ছি , এখন আমরা অ্যাক্সেস করতে পারিbb..cc যাতে ফিরে আসা পাঠ্যটি ।

আমি আশা করি ব্যাখ্যা জটিল নয়।

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