এক্সপথ: কীভাবে তাদের মানের উপর ভিত্তি করে উপাদানগুলি নির্বাচন করবেন?


221

আমি এক্সপথ ব্যবহারে নতুন এবং এটি একটি প্রাথমিক প্রশ্ন হতে পারে। দয়া করে আমার সাথে সহ্য করুন এবং সমস্যাটি সমাধানে আমাকে সহায়তা করুন। আমার কাছে একটি এক্সএমএল ফাইল রয়েছে:

<RootNode>
  <FirstChild>
    <Element attribute1="abc" attribute2="xyz">Data</Element>
  <FirstChild>
</RootNode>

আমি এর সাথে একটি <Element>ট্যাগ উপস্থিতি যাচাই করতে পারি :

// এলিমেন্ট [@ অ্যাট্রিবিউট 1 = "এবিসি" এবং @ অ্যাট্রিবিউট 2 = "এক্সইজেড"]

এখন আমি স্ট্রিংয়ের জন্য ট্যাগটির মানও পরীক্ষা করতে চাই "Data"। এটি অর্জনের জন্য আমাকে ব্যবহার করতে বলা হয়েছিল:

// এলিমেন্ট [@ অ্যাট্রিবিউট 1 = "এবিসি" এবং @ অ্যাট্রিবিউট 2 = "এক্সইজেড" এবং ডেটা]

আমি যখন পরবর্তী প্রকাশটি ব্যবহার করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

দৃ failure় ব্যর্থতা বার্তা: কোনও নোড মেলে না //Element[@attribute1="abc" and @attribute2="xyz" and Data]

আমি যে এক্সপথ এক্সপ্রেশনটি ব্যবহার করেছি তা বৈধ কিনা তা দয়া করে আমাকে আপনার পরামর্শ দিন। তা না হলে বৈধ এক্সপথ এক্সপ্রেশন কী হবে?

উত্তর:


329

নীচের শর্ত:

//Element[@attribute1="abc" and @attribute2="xyz" and Data]

এলিমেন্টের মধ্যে উপাদানের ডেটা অস্তিত্বের জন্য পরীক্ষা করে এবং উপাদান মান ডেটার জন্য নয়।

পরিবর্তে আপনি ব্যবহার করতে পারেন

//Element[@attribute1="abc" and @attribute2="xyz" and text()="Data"]

25
//Element[@attribute1="abc" and @attribute2="xyz" and .="Data"]

কারণ আমি এই উত্তর যোগ যে আমি সম্পর্ক ব্যাখ্যা করতে চান .এবংtext()

প্রথম জিনিসটি ব্যবহার করার সময় [], কেবলমাত্র দুটি ধরণের ডেটা থাকে:

  1. [number] নোড-সেট থেকে নোড নির্বাচন করতে
  2. [bool] নোড-সেট থেকে নোড-সেট ফিল্টার করতে

এই ক্ষেত্রে, মানটি ফাংশন দ্বারা বুলিয়ান হিসাবে মূল্যায়ন করা হয় boolean()এবং একটি নিয়ম রয়েছে:

ফিল্টারগুলি সর্বদা একটি প্রসঙ্গে শ্রদ্ধার সাথে মূল্যায়ন করা হয়।

যখন আপনার তুলনা করতে text()বা .একটি স্ট্রিংয়ের সাথে দরকার হয় "Data", এটি প্রথমে string()बुুলিয়ান ফলাফল পাওয়ার চেয়ে স্ট্রিংয়ের ধরণে রূপান্তরিত করতে ফাংশনটি ব্যবহার করে।

এ সম্পর্কে দুটি গুরুত্বপূর্ণ নিয়ম রয়েছে string():

  1. string()ফাংশন নোড সেট প্রথম নোড, যা কিছু দৃষ্টান্ত অপ্রত্যাশিত ফলাফল উত্পাদ পারে স্ট্রিং মান ফিরে একটি স্ট্রিং করার জন্য একটি নোড সেট পরিবর্তন করে।

    text()আপেক্ষিক পথ যা কোনও নোড-সেট ফিরে আসে বর্তমান নোডের সমস্ত পাঠ্য নোড (কনটেক্সট নোড) এর মতো করে ["Data"]। যখন এটি দ্বারা মূল্যায়ন করা হয় string(["Data"]), এটি নোড-সেটের প্রথম নোডটি ফিরিয়ে দেবে, সুতরাং নোড-সেটে কেবল একটি পাঠ্য নোড থাকলেই আপনি "ডেটা" পাবেন।

  2. আপনি যদি string()সমস্ত সন্তানের পাঠ্যকে ফাংশনটি একত্রিত করতে চান তবে আপনাকে অবশ্যই নোড-সেটের পরিবর্তে একটি একক নোডটি পাস করতে হবে।

    উদাহরণস্বরূপ, আমরা একটি নোড-সেট পেয়েছি ['a', 'b'], আপনি সেখানে প্যারেন্ট নোডটি সেখানে string(parent)যেতে পারেন 'ab', এটি ফিরে আসবে , এবং কারণ string(.)হিসাবে আপনার ক্ষেত্রে একটি কাঠের স্ট্রিংটি ফিরে আসবে "Data"

পাঠ্য নোড থাকলেই উভয় পথেই একই ফলাফল পাওয়া যাবে।

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