এক্সপ্যাথটি অ্যাট্রিবিউট মান দ্বারা এলিমেন্ট নির্বাচন করতে


193

আমি এক্সএমএল অনুসরণ করা আছে।

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee id="3">
        <age>40</age>
        <name>Tom</name>
        <gender>Male</gender>
        <role>Manager</role>
    </Employee>
    <Employee id="4">
        <age>25</age>
        <name>Meghna</name>
        <gender>Female</gender>
        <role>Manager</role>
    </Employee>
</Employees>

আমি আইডি = "4" দিয়ে কর্মী উপাদান নির্বাচন করতে চাই।

আমি এক্সপথ এক্সপ্রেশনটি নীচে ব্যবহার করছি যা কোনও কিছুই প্রত্যাবর্তন করছে না।

//Employee/[@id='4']/text()

আমি এটি http://chris.photobooks.com/xML/default.htm এ যাচাই করেছিলাম এবং এটি অবৈধ এক্সপথ বলে, সমস্যাটি কোথায় তা নিশ্চিত নয়।

উত্তর:


275

আপনার আগেটি অপসারণ করতে /হবে [। ভবিষ্যদ্বাণী করা (অংশগুলির [ ]) এর আগে তাদের তত্ক্ষণাত্ স্ল্যাশ হওয়া উচিত নয়। এছাড়াও, নিজেই কর্মচারী উপাদান নির্বাচন করতে, আপনার /text()শেষে প্রস্থানটি ছেড়ে দেওয়া উচিত বা অন্যথায় আপনি কেবল কর্মী উপাদানটির অধীনে অবিলম্বে হোয়াইটস্পেসের পাঠ্য মানগুলি নির্বাচন করছেন।

//Employee[@id='4']

সম্পাদনা করুন: জেনস মন্তব্যগুলিতে যেমন উল্লেখ করেছেন, //খুব ধীর হতে পারে কারণ এটি নোডের সাথে মিলে পুরো দস্তাবেজটি অনুসন্ধান করে। আপনি যে দস্তাবেজের সাথে কাজ করছেন তার কাঠামো যদি সামঞ্জস্যপূর্ণ হতে চলেছে তবে আপনি সম্ভবত একটি পুরো পথ ব্যবহার করে সেরা, উদাহরণস্বরূপ:

/Employees/Employee[@id='4']

3
দ্রষ্টব্য যে দস্তাবেজের সমস্ত নোডের //উপরে নির্বাচন করে এবং অনুসন্ধান করে যা ধীর হতে পারে। পরিবর্তে, যদি নথির কাঠামোটি জানা থাকে তবে নীচের গিলসের উত্তরে প্রস্তাবিত একটি যথাযথ পথ ব্যবহার করুন ।
জেনস 21

@ জেনস হ্যাঁ, এটি একেবারে সত্য। একটি সংযোজন যুক্ত করতে আমি আমার উত্তর সম্পাদনা করেছি।
জেএলরিশ

12

এটি করার চেষ্টা করুন:

/Employees/Employee[@id=4]/*/text()

xmllint আইডিএস সন্ধানের আগে পুরো এক্সএমএল ফাইলকে মেমরিতে লোড করে ?. আমার কাছে 46 গিগাবাইটের একটি এক্সএমএল ফাইল রয়েছে এবং আমি এতে আইডির সন্ধান করছি
হানি গক

46 গিগাবাইটের এক্সএমএল ফাইল - সমস্যা আছে।
গুরবিন্দর সিং

12

অনুসরণ হিসাবে, আপনি এই জাতীয় "একটি বিশেষ বৈশিষ্ট্যযুক্ত সমস্ত নোড" নির্বাচন করতে পারেন:

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