এক্সপথের মাধ্যমে অ্যাট্রিবিউট নোডের মান বের করুন


269

এক্সপ্যাথের মাধ্যমে আমি কীভাবে কোনও অ্যাট্রিবিউট নোডের মান বের করতে পারি?

একটি নমুনা এক্সএমএল ফাইলটি হ'ল:

<parents name='Parents'>
  <Parent id='1' name='Parent_1'>
    <Children name='Children'>
      <child name='Child_2' id='2'>child2_Parent_1</child>
      <child name='Child_4' id='4'>child4_Parent_1</child>
      <child name='Child_1' id='3'>child1_Parent_1</child>
      <child name='Child_3' id='1'>child3_Parent_1</child>
    </Children>
  </Parent>
  <Parent id='2' name='Parent_2'>
    <Children name='Children'>
      <child name='Child_1' id='8'>child1_parent2</child>
      <child name='Child_2' id='7'>child2_parent2</child>
      <child name='Child_4' id='6'>child4_parent2</child>
      <child name='Child_3' id='5'>child3_parent2</child>
    </Children>
  </Parent>
</parents>

এখনও পর্যন্ত আমার কাছে এই এক্সপথ স্ট্রিং রয়েছে:

//Parent[@id='1']/Children/child[@name]  

এটি কেবলমাত্র childউপাদানগুলি ফেরত দেয় তবে আমি গুণকের মানটি পেতে চাই name

আমার নমুনা এক্সএমএল ফাইলের জন্য, আমি আউটপুটটি যা চাই তা এখানে:

Child_2
Child_4
Child_1
Child_3

উত্তর:


349
//Parent[@id='1']/Children/child/@name 

আপনার আসলটির child[@name]অর্থ এমন একটি উপাদান childযা একটি বৈশিষ্ট্যযুক্ত name। আপনি চান child/@name


14
আমি সম্মত, প্রশ্নটি কীভাবে
গুণকের

5
আমি যদি ট্যাগগুলির মধ্যে উপস্থিত মূল্য / বিবরণ / ডেটা কেবলই বের করতে চাই ....
দিনু ডিউক

146

শুধু মান (বিশিষ্ট নাম ছাড়া) পেতে, ব্যবহার করুন string():

string(//Parent[@id='1']/Children/child/@name)

FN: STRING () fucntion তার যুক্তি মান ফিরে আসবে xs:string। যদি তার আর্গুমেন্টটি একটি বৈশিষ্ট্য হিসাবে থাকে, তবে এটির কারণে গুণকের মানটি ফিরে আসবে xs:string


1
সঙ্গে xqillaএকে ডাকতে প্রয়োজন ছিল xs:string। আমি ভাবছি কেন.
krlMLr

1
@krlmlr সম্ভবত এক্সপথ ফাংশনগুলির xsনেমস্পেস উপসর্গ। সুতরাং এগুলি অন্যের সাথে মিশে যায় না।
acdcjunior

4
হাঃ হাঃ হাঃ. এটিই কেবলমাত্র উত্তর যা আসলে প্রশ্নের উত্তর দেয়। +1
james.garriss


1
আমার যদি গুণাবলীর একটি তালিকা থাকে এবং আমি তাদের মানগুলি চাই? স্ট্রিং () কেবল প্রথম মানটি ফেরত বলে মনে হচ্ছে।
দামালুয়ার

8

আপনার ব্যবহার করা উচিত //Parent[@id='1']/Children/child/data(@name)

বৈশিষ্ট্যগুলি ক্রমিকায়িত করা যায় না তাই আপনি কোনও এক্সএমএল ফলাফলের মধ্যে এগুলি ফিরিয়ে দিতে পারবেন না। আপনাকে যা করতে হবে তা হ'ল ডেটা () ফাংশন ব্যবহার করে অ্যাট্রিবিউট থেকে ডেটা প্রাপ্ত করা।


7

উপরে উত্তর হিসাবে:

//Parent[@id='1']/Children/child/@name 

কেবলমাত্র তার পূর্বাভাস দ্বারা নির্দিষ্ট করা name4 টি childনোডের বৈশিষ্ট্যটিকে আউটপুট দেবে । তারপরে আপনার পরবর্তী নোডের সেট পেতে প্রিকিকেট পরিবর্তন করতে হবে ।Parent[@id=1][@id=2]childParent

তবে আপনি যদি Parentনোডকে পুরোপুরি উপেক্ষা করেন এবং ব্যবহার করেন:

//child/@name

আপনি nameএকযোগে সমস্ত childনোডের বৈশিষ্ট্য নির্বাচন করতে পারেন।

name="Child_2"
name="Child_4"
name="Child_1"
name="Child_3"
name="Child_1"
name="Child_2"
name="Child_4"
name="Child_3"

5
//Parent/Children[@  Attribute='value']/@Attribute

এটি এমন ক্ষেত্রে ব্যবহার করা যেতে পারে যেখানে উপাদানটির 2 টি অ্যাট্রিবিউট থাকে এবং আমরা অন্যটির সাহায্যে একটি বৈশিষ্ট্যটি পেতে পারি।


1

@ আরিনাস, আপনাকে ফলাফলটি লুপ করতে হবে। এইভাবে আমি vbscript এ এটি করব;

Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.load("kids.xml")

'Remove the id=1 attribute on Parent to return all child names for all Parent nodes
For Each c In xmlDoc.selectNodes ("//Parent[@id='1']/Children/child/@name")
    Wscript.Echo c.text
Next

1

নেমস্পেস সহ সমস্ত এক্সএমএলের জন্য স্থানীয় নাম ব্যবহার করুন ()

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