এক্সপথ: চাইল্ড নোড থেকে প্যারেন্ট নোড পান


157

চাইল্ড নোডের জন্য আমার প্যারেন্ট নোড দরকার title 50

এই মুহুর্তে আমি কেবল ব্যবহার করছি

//*[title="50"]

আমি কীভাবে এর পিতামাতাকে পেতে পারি? ফলাফলটি storeনোড হওয়া উচিত ।


<?xml version="1.0" encoding="utf-8"?>
<d:data xmlns:d="defiant-namespace" d:mi="23">
    <store d:mi="22">
        <book price="12.99" d:price="Number" d:mi="4">
            <title d:constr="String" d:mi="1">Sword of Honour</title>
            <category d:constr="String" d:mi="2">fiction</category>
            <author d:constr="String" d:mi="3">Evelyn Waugh</author>
        </book>
        <book price="8.99" d:price="Number" d:mi="9">
            <title d:constr="String" d:mi="5">Moby Dick</title>
            <category d:constr="String" d:mi="6">fiction</category>
            <author d:constr="String" d:mi="7">Herman Melville</author>
            <isbn d:constr="String" d:mi="8">0-553-21311-3</isbn>
        </book>
        <book price="8.95" d:price="Number" d:mi="13">
            <title d:constr="String" d:mi="10">50</title>
            <category d:constr="String" d:mi="11">reference</category>
            <author d:constr="String" d:mi="12">Nigel Rees</author>
        </book>
        <book price="22.99" d:price="Number" d:mi="18">
            <title d:constr="String" d:mi="14">The Lord of the Rings</title>
            <category d:constr="String" d:mi="15">fiction</category>
            <author d:constr="String" d:mi="16">J. R. R. Tolkien</author>
            <isbn d:constr="String" d:mi="17">0-395-19395-8</isbn>
        </book>
        <bicycle price="19.95" d:price="Number" d:mi="21">
            <brand d:constr="String" d:mi="19">Cannondale</brand>
            <color d:constr="String" d:mi="20">red</color>
        </bicycle>
    </store>
</d:data>

উত্তর:


294

অভিভাবক নোডের নাম সহ parentঅক্ষগুলি ব্যবহার করুন ।

//*[title="50"]/parent::store

এই এক্সপথটি কেবলমাত্র পিতামাতার নোডটি নির্বাচন করবে store

তবে আপনি এর মধ্যে একটি ব্যবহার করতে পারেন

//*[title="50"]/parent::*
//*[title="50"]/..

এই এক্সপ্যাথগুলি যে কোনও প্যারেন্ট নোড নির্বাচন করবে। সুতরাং নথির পরিবর্তন হলে আপনি সর্বদা একটি নোড নির্বাচন করবেন, যদিও এটি নোড আপনি আশা করেননি।

সম্পাদনা

প্রদত্ত উদাহরণে যেখানে ঘটে যায় যেখানে পিতা-মাতা একটি সাইকেল তবে পিতামাতার পিতা বা মাতা একটি দোকান?

এটি আরোহণ হয় না?

না, এটি কেবলমাত্র স্টোরটি নির্বাচন করে যদি এটি মেলে নোডের পিতামাতা //*[title="50"]

যদি তা না হয় তবে এই জাতীয় ক্ষেত্রে পিতামহী না থাকলে কী এই জাতীয় ক্ষেত্রে আরোহণ এবং কোনওটি ফেরত দেওয়ার কোনও পদ্ধতি আছে?

হ্যাঁ, আপনি ancestorঅক্ষ ব্যবহার করতে পারেন

//*[title="50"]/ancestor::store

এটি ode স্টোরগুলির সাথে মিলিত নোডের সমস্ত পূর্বপুরুষকে বেছে নেবে //*[title="50"]। যেমন

<data xmlns:d="defiant-namespace" d:mi="23">
    <store mi="1">
        <store mi="22">
            <book price="8.95" d:price="Number" d:mi="13">
                <title d:constr="String" d:mi="10">50</title>
                <category d:constr="String" d:mi="11">reference</category>
                <author d:constr="String" d:mi="12">Nigel Rees</author>
            </book>
        </store>
    </store>
</data>

এক্সপথ নির্বাচনের ফলাফল


7
আপনি parent::*সংক্ষিপ্ত বাক্য গঠন ..(উদাহরণ //*[title="50"]/..:) বা নেস্টেড প্রিডিকেট (উদাহরণ: //*[*[title="50"]]) ও ব্যবহার করতে পারেন
ড্যানিয়েল হ্যালি


3
বা parent::node()যা শর্টকাটের সাথে মিলে যায় ..এবং আমার মতে এটি আরও ভাল। প্রকৃতপক্ষে parent::*অক্ষের মূল নোড টাইপের মধ্যে সীমাবদ্ধ যা বেশিরভাগ ক্ষেত্রে কোনও সমস্যা নয়।
লুডোভিক কিউটি

3
আপনি যদি ব্যবহার করে থাকেন .xpath('..')বাxpath('parent::node()')
ব্রিঙ্কিপ

"এই এক্সপথটি যদি কেবল কোনও স্টোর হয় তবে প্যারেন্ট নোডটি নির্বাচন করবে" " - এবং প্রদত্ত উদাহরণে যেখানে ঘটে থাকে যেখানে পিতা বা মাতা থাকেন bicycleতবে পিতামাতার বাবা থাকে store? এটি আরোহণ হয় না? যদি তা না হয় তবে এ জাতীয় ক্ষেত্রে আরোহণের কোনও পদ্ধতি আছে এবং Noneযদি সেখানে কোনও অভিভাবক না থাকে তবে ফিরে আসুন?
মার্টিন থোমা

31

বিকল্প হিসাবে, আপনি ব্যবহার করতে পারেন ancestor

//*[title="50"]/ancestor::store

এটি parentএমনকি পিতামহী বা দুর্দান্ত দাদা-পিতামহাকে পেতে পারে তার চেয়ে বেশি শক্তিশালী


20
এটি "আরও শক্তিশালী" নয়। এটা ঠিক অন্যরকম। সুতরাং অক্ষের পছন্দ ব্যবহারের ক্ষেত্রে নির্ভর করে।
লুডোভিচ কিউটি

11

আপনি প্রকাশের শেষে দুটি বিন্দুও ব্যবহার করতে পারেন। এই উদাহরণটি দেখুন:

//*[title="50"]/..

2

একটি পুরানো, প্রায়শই জিজ্ঞাসিত প্রশ্নের নতুন, উন্নত উত্তর ...

আমি কীভাবে এর পিতামাতাকে পেতে পারি? ফলাফলটি storeনোড হওয়া উচিত ।

অক্ষ parent::বা ancestor::অক্ষের চেয়ে প্রিকিকেট ব্যবহার করুন

এখানে বেশিরভাগ উত্তরগুলি নির্বাচন করে titleতারপরে লক্ষ্যবস্তু পিতামাতা বা পূর্বপুরুষ ( store) উপাদানটিকে অনুসরণ করতে পারে। একটি সহজ, প্রত্যক্ষ পন্থা হ'ল পিতা বা মাতা বা পূর্বপুরুষের উপাদানটি প্রথম স্থানে বেছে নেওয়া, একটি parent::বা ancestor::অক্ষের দিকে যাওয়ার প্রয়োজনকে অবজ্ঞা করে :

//*[book/title = "50"]

হস্তক্ষেপকারী উপাদানগুলির নাম পরিবর্তিত হওয়া উচিত:

//*[*/title = "50"]

অথবা, নাম এবং গভীরতা:

//*[.//title = "50"]

এটি প্রশ্নের উত্তর দেয় না। লেখক অগত্যা সময়ের আগে পিতামাতার নামটি জানে না।
কেন সেবেস্তা

1
@ কেনেনসেবা: আপনার উদ্বেগের সমাধান করার জন্য আমি উত্তরটি আপডেট করেছি। আপনার আপত্তি সম্বোধন করা থাকলে দয়া করে আপনার ডাউনটোটটি সরিয়ে ফেলুন, বা উত্তরটি দিয়ে কিছু ভুল মনে হচ্ছে কিনা তা আমাকে জানান। ধন্যবাদ।
kjhughes

0

এটি আমার ক্ষেত্রে কাজ করে। আমি আশা করি আপনি এর অর্থ বের করতে পারবেন।

//div[text()='building1' and @class='wrap']/ancestor::tr/td/div/div[@class='x-grid-row-checker']
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.