এক্সপ্যাথ ব্যবহার করে অ্যাট্রিবিউট প্রাপ্ত করা


344

এর মতো একটি এক্সএমএল কাঠামো দেওয়া হয়েছে:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

আমি এর মান কিভাবে পেতে পারে lang(যেখানে langহয় engপ্রথম উপাদানের জন্য, বই শিরোনামে)?


2
এক্সপ্যাথগুলি পরীক্ষার

উত্তর:


472

প্রথম উপাদানটির জন্য আমি কীভাবে ল্যাংয়ের মান (যেখানে ল্যাং = বইয়ের শিরোনামে নিযুক্ত) থাকতে পারি?

ব্যবহার :

/*/book[1]/title/@lang

এর অর্থ :

এক্সএমএল ডকুমেন্টের শীর্ষ উপাদানটির langপ্রথম bookসন্তানের সন্তানের শিরোনাম উপাদানটির বৈশিষ্ট্য নির্বাচন করুন ।

এই বৈশিষ্ট্যের স্ট্রিং মান পেতে স্ট্যান্ডার্ড এক্সপথ ফাংশনটি ব্যবহার করুনstring() :

string(/*/book[1]/title/@lang)

3
@AbhishekAsthana, xpath প্রকাশ মূল্যায়নের ফলাফলের ঠিক এর স্ট্রিং মান উৎপন্ন langঅ্যাট্রিবিউট। যদি অ্যাট্রিবিউটে কোনও বর্গাকার বন্ধনী না থাকে তবে তারা এক্সপাথ এক্সপ্রেশনটির মূল্যায়নের ফলাফলের অংশ হবে না। আমার অনুমান যে এগুলি আপনি ব্যবহার করছেন এমন একটি (অনুপযুক্ত) সরঞ্জাম দ্বারা যুক্ত করা হয়েছে।
দিমিত্রে নোভাচাভেভ

6
হ্যাঁ আমি সমস্যাটি বুঝতে পেরেছি ... এটি কীভাবে সাবান ইউআই প্রদর্শন করে তবে আমি এক্সপথ মানটি ব্যবহার করার সময় সেই বন্ধনীগুলি ব্যবহার করা হয় না। আমি এটি অনেক সময় দেখেছি। সমস্যাটি টুল..কারীর এবং কীবোর্ডের মধ্যে নেই।
অভিষেক আস্থানা

4
@ KorayTugay, এক্সপথ এক্সপ্রেশন 0 বা ততোধিক গুণযুক্ত নোডের একটি নোড-সেট /*/book[1]/title/@lang নির্বাচন করে, যখন এক্সপথ এক্সপ্রেশনটি string(/*/book[1]/title/@lang)মূল্যায়ন করা হয়, তখন এই নোড-সেটটির স্ট্রিংয়ের মান তৈরি করে - এবং এটি প্রথম (ডকুমেন্টের ক্রমে) এর স্ট্রিং মান হয় এই নোড-সেট থেকে নোড
দিমিত্রে নোভাচেভ

4
@ কোরেগুগেই, না, প্রথম প্রকাশটি নির্বাচন করে , "রিটার্ন" করে না - নোডের একটি সেট, এবং নোডের এই সেটটি স্ট্রিং নয়। নোড একটি স্ট্রিং নয় - একটি নোড একটি গাছে নোড । একটি এক্সএমএল নথি হ'ল নোডের গাছ tree lang="eng""ল্যাং" নাম রয়েছে এমন একটি অ্যাট্রিবিউট নোডের কেবলমাত্র অনেকগুলি পাঠ্য উপস্থাপনার মধ্যে এটি একটি নেমস্পেসের সাথে সম্পর্কিত নয় এবং স্ট্রিংয়ের মান "ইঞ্জ" রয়েছে
ইঞ্জি

1
@ ভ্লাদিমির, যদি ভি নামের নামের সাথে সম্পর্কিত হয়: "আমার: ভিভিভি", তবে এক্সপ্যাথ ইঞ্জিনের হোস্টে যে কোনও একটি ম্যাপিংকে মাইপিং সহযোগী মাইপ্রিজিক্স ব্যবহার করা যেতে পারে (v হতে পারে তবে প্রয়োজন হবে না) একই নাম স্পেসের সাথে -উরি "আমার: ভিভিভি"। এবং তারপরে বৈশিষ্ট্যটি নির্বাচন করা হবে: শিরোনাম / @ মাইপ্রিফিক্স: ল্যাং ব্যবহার করে। এই ধরনের ম্যাপিং কীভাবে তৈরি করা হয় তা বাস্তবায়ন-নির্দিষ্ট এবং এক্সপ্যাথ ইঞ্জিনের হোস্টের ডকুমেন্টেশনে পড়তে হয়। এটি নেটটিতে একটি নির্দিষ্ট উপায়ে এবং স্যাকসনে অন্যভাবে বলা যায়। আপনার যদি এ জাতীয় কোনও ম্যাপিং না থাকে তবে শিরোনাম / @ * [নাম () = 'ভি: ল্যাং']
দিমিত্রে নোভাচাচেভ

47

ধন্যবাদ! এটি একটি ডিভের ভিতরে ডেটা অ্যাট্রিবিউট সহ আমার অনুরূপ সমস্যার সমাধান করেছিল।

<div id="prop_sample" data-want="data I want">data I do not want</div>

এই এক্সপথটি ব্যবহার করুন: //*[@id="prop_sample"]/@data-want

আশাকরি ইহা অন্য কারো সাহায্য করবে!


6

আপনি xPath প্যাটার্ন নীচে চেষ্টা করতে পারেন,

  XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")

5
এটি / বুকস্টোর / বইয়ের আওতায় থাকা কোনও এক্সএমএল শিরোনাম উপাদান নির্বাচন করবে যা ল্যাংয়ের মান নয়, মান ইঞ্জিনের সাথে ল্যাং এ্যাট্রিবিউট রয়েছে। অর্থাত্ এটি এটি একটি একক বৈশিষ্ট্য নয়, উপাদানগুলির তালিকা নির্বাচন করে
জেএফকে

2

আপনি এটি দ্বারা পেতে পারেন

string(//bookstore/book[1]/title/@lang)    
string(//bookstore/book[2]/title/@lang)

যদিও আপনি জাভাস্ক্রিপ্টের সাথে এক্সএমএলডম ব্যবহার করছেন তবে আপনি এর মতো কিছু কোড করতে পারেন

var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang");

এবং n1.textআপনি মান দিতে হবে"eng"


2

তুমি ব্যবহার করতে পার:

(//@lang)[1]

এর অর্থ আপনি "ল্যাং" সমান নামের সাথে সমস্ত বৈশিষ্ট্য নোড পাবেন এবং প্রথমটি পাবেন।


0

এক্সপ্যাথ এবং ভিটিডি-এক্সএমএল সহ "ল্যাং" এর গুণক মানটি পাওয়ার স্নিপেট এখানে।

import com.ximpleware.*;
public class getAttrVal {
    public static void main(String s[]) throws VTDException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false)){
            return ;
        }
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/bookstore/book/title/@lang");
        System.out.println(" lang's value is ===>"+ap.evalXPathToString());
    }
}

0

আপনি যদি PostgreSQL ব্যবহার করেন তবে এটি পাওয়ার সঠিক উপায়। এটি কেবলমাত্র একটি অনুমান যেখানে আপনার কাছে জনবহুল ডেটা সহ একটি বইয়ের টেবিল TITLE এবং PRICE কলাম রয়েছে। কোয়েরি এখানে

SELECT xpath('/bookstore/book/title/@lang', xmlforest(book.title AS title, book.price AS price), ARRAY[ARRAY[]::TEXT[]]) FROM book LIMIT 1;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.