নোড বিদ্যমান থাকলে এক্সপথ সন্ধান করুন


201

একটি এক্সপাথ ক্যোয়ারী ব্যবহার করে আপনি কীভাবে আবিষ্কার করবেন যে কোনও নোড (ট্যাগ) আদৌ বিদ্যমান আছে?

উদাহরণস্বরূপ, যদি আমার কোনও ওয়েবসাইটের পৃষ্ঠায় / এইচটিএমএল / বডি এবং / এইচটিএমএল / প্রধান / শিরোনামের মতো সঠিক বেসিক কাঠামো রয়েছে তা নিশ্চিত করার দরকার হয়


বাধ্যতামূলক উপাদানগুলির ইঙ্গিত সহ এক্সএমএল স্কিমা ব্যবহার করা আরও ভাল? সুতরাং পরীক্ষা করুন যে কোনও দস্তাবেজ এটি ব্যবহার করছে বা না।
আবাতিশ শেভ

উত্তর:


321
<xsl:if test="xpath-expression">...</xsl:if>

উদাহরণস্বরূপ

<xsl:if test="/html/body">body node exists</xsl:if>
<xsl:if test="not(/html/body)">body node missing</xsl:if>

41
এত উচ্চ রেটিংয়ে বিস্মিত হয়ে যে প্রশ্নটি XSLT এর ব্যবহারটি নির্দিষ্ট করে না।
tjmoore

এটি দুর্দান্ত তবে আমি যদি এটির উপস্থিতি বা খালি খালি পরীক্ষা করতে চাইতাম তবে কী হবে?
ফরজজ্ঞান

3
@ সন্ধান ফোরক্লানজ, আপনার সম্ভবত এসও-তে নতুন প্রশ্ন হিসাবে এটি জিজ্ঞাসা করা উচিত, তবে দ্রুত গাইড হিসাবে: html/body and not(html/body/node())(যেমন, এটি পরীক্ষা করে দেখুন এটি বিদ্যমান কিনা এবং এতে কোনও শিশু নোড বা পাঠ্য নোড নেই)।
আবেল

71

নিম্নলিখিত এক্সপ্রেশন চেষ্টা করুন: boolean(path-to-node)


3
LxML সহ পাইথনে এক্সপথ ব্যবহার করার সময় আমার ঠিক এটির প্রয়োজন ছিল।
আয়ান স্যামুয়েল ম্যাকলিন বয়স্ক

1
এই আচরণ যখন InfoPath 2010 মধ্যে রুল শর্তাবলী এবং রুল পদক্ষেপ নির্মাণের কাজ
Merenzo

3
এই অর্থে সঠিক উত্তর যে এটি আসলে একটি এক্সপ্যাথ ক্যোয়ারী, অন্যান্য উত্তরগুলির বেশিরভাগের থেকে পৃথক।
পল ইথারটন

48

প্যাট্রিক সঠিক, উভয়ই ব্যবহারে xsl:ifএবং নোডের অস্তিত্বের জন্য যাচাই করার জন্য বাক্য গঠনতে। তবে প্যাট্রিক প্রতিক্রিয়া বোঝা যায়, সেখানে কোন XSL সমতুল্য হলে-তারপর-আর, আপনি আরো ভালো কিছু খুঁজছেন তাই যদি একটি যদি-তারপর-অন্য আপনি সাধারণত ব্যবহার বন্ধ ভালো আছেন xsl:chooseএবং xsl:otherwise। সুতরাং, প্যাট্রিকের উদাহরণ সিনট্যাক্স কাজ করবে, তবে এটি একটি বিকল্প:

<xsl:choose>
 <xsl:when test="/html/body">body node exists</xsl:when>
 <xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>

+1 লক্ষ করার জন্য if-then-else, এছাড়াও কি if-else if-else? ডেভেনপিসিজির উত্তরে আমি test="somexpath"2 য় স্থানে রাখতে পারি কখন এটি তৈরি করব if-else if-else?
অাবিনগঞ্জ

3
@ অভিষেক হ্যাঁ, আপনি আরও এক্সএসএল রাখতে পারেন: যখন অন্যান্য শর্তের সাথে থাকে এবং একটি বহু-শাখা বিবৃতি থাকে। এটিকে xsl সহ অন্যথায় ডিফল্ট হিসাবে: - যদি-তবে-অন্যটির চেয়ে আরও বেশি নির্বাচনের মতো ভাবেন।
davenpcj

এটি দুর্দান্ত তবে আমি যদি এটির উপস্থিতি বা খালি খালি পরীক্ষা করতে চাইতাম তবে কী হবে?
ফরজজ্ঞান

13

একটি পছন্দ ব্যবহার করা ভাল হতে পারে, আপনার এক্সপ্রেশন একাধিকবার টাইপ (বা সম্ভবত ভুল টাইপ) করতে হবে না এবং আপনাকে অতিরিক্ত বিভিন্ন আচরণ অনুসরণ করতে দেয় follow

আমি প্রায়শই ব্যবহার করি count(/html/body) = 0, কারণ নির্দিষ্ট সংখ্যার নোড সেটটির চেয়ে আকর্ষণীয়। উদাহরণস্বরূপ ... যখন অপ্রত্যাশিতভাবে 1 টিরও বেশি নোড থাকে যা আপনার ভাবের সাথে মেলে।

<xsl:choose>
    <xsl:when test="/html/body">
         <!-- Found the node(s) -->
    </xsl:when>
    <!-- more xsl:when here, if needed -->
    <xsl:otherwise>
         <!-- No node exists -->
    </xsl:otherwise>
</xsl:choose>

উপরের কোডটিতে ইঙ্গিত হিসাবে, আরও এক্সএসএল: যখন আচরণ পরিবর্তন করতে এবং একাধিক শর্তকে বিভিন্ন উপায়ে পরিচালনা করার জন্য ক্লজ যুক্ত করা যায়।
davenpcj

count(/html/body) = 0 প্রতিভা! : ডিআই কখন (বা যা কিছু) অনুপস্থিত তা বাছাই /html[count(/body)=0]/someNodeকরার জন্য এটি ব্যবহার করুনsomeNode/body
স্টিফান রোগিন

1
@ ক্লিকস্টেফান, /html[count(/body)=0]কখনও কিছুই নির্বাচন করবে না, এক্সএমএলে দুটি মূল নোড থাকতে পারে না। হতে পারে আপনি বোঝাতে চেয়েছিলেন /html[count(body)=0], যা একই রকম হবে /html[not(body)], বা /html[not(exists(body))]
আবেল

@ আবেল হ্যাঁ, / এইচটিএমএল [গণনা (// বডি) = 0] বা আপনি কীভাবে বলেছেন, লজ্জাজনক তবে হ্যাঁ আমি একটি যথাযথ উদাহরণ
দিইনি

4

আমি রুবিতে কাজ করি এবং নোকোগিরি ব্যবহার করে আমি উপাদানটি আনি এবং ফলাফলটি শূন্য হয় কিনা তা দেখতে।

require 'nokogiri'

url = "http://somthing.com/resource"

resp = Nokogiri::XML(open(url))

first_name = resp.xpath("/movies/actors/actor[1]/first-name")

puts "first-name not found" if first_name.nil?

3

জাভাতে এক্সপাথ ব্যবহার করার সময় একটি গণনা () ব্যবহার করে:

int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
    // body node missing
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.