आपके पास XPath में बिल्कुल तर्क नहीं है, लेकिन आप जो कुछ भी चाहते हैं उसे करने में सक्षम हो सकते हैं।
यदि आप //table/tr/td[2]/a
चुनना चाहते हैं, लेकिन केवल अगर इसमें img[@class='special']
है, तो आप //table/tr/td[2]/a[img[@class='special']]
का उपयोग कर सकते हैं।
आप किसी अन्य परिस्थिति में कुछ अन्य नोड का चयन करना चाहते हैं, तो आप संघ दो रास्ते (|
ऑपरेटर), और बस सुनिश्चित करें कि प्रत्येक एक फिल्टर ([]
अंदर), है कर सकता है कि पारस्परिक रूप से विशिष्ट है, एक हो होने की तरह एक पथ और दूसरा उस पथ के not()
हो। मैं एक उदाहरण दूंगा, लेकिन मुझे यकीन नहीं है कि "अन्य यादृच्छिक नोड" आप क्या चाहते हैं ... शायद आप स्पष्टीकरण दे सकते हैं?
मुख्य बात यह है कि XPath को एक प्रश्नोत्तरी भाषा के रूप में सोचना है, प्रक्रियात्मक नहीं, इसलिए आपको चयनकर्ताओं और फ़िल्टरों के बारे में सोचने की आवश्यकता है, जो अधिकांश प्रोग्रामर की तुलना में समस्याओं के बारे में सोचने का एक अलग तरीका है सेवा मेरे। लेकिन तथ्य यह है कि फिल्टर को विशेष रूप से चयनकर्ता से संबंधित होने की आवश्यकता नहीं है (उदाहरण के लिए, आपके पास एक फ़िल्टर हो सकता है जो दस्तावेज की जड़ को देखना शुरू कर देता है) कुछ शक्तिशाली (यदि पढ़ने में कठोर) संभावनाएं होती है।
स्रोत
2012-11-27 02:29:32
धन्यवाद। मैं मूल रूप से '// div/div/table/tr/td [2]/a/img [@ class =' special ']' जैसे गहरे पथ की जांच करने की कोशिश कर रहा हूं और यदि यह मौजूद है तो उसी पथ से डेटा प्राप्त करें लेकिन एक कुछ कदम पीछे: '// div/div/table/tr/td [2]/a' और तत्व जिनके पास उनके बच्चे पर लागू 'विशेष' वर्ग नहीं है:
। –
AnchovyLegend
तब मुझे लगता है कि '// table/tr/td [2]/a [img [@ class =' special ']]' जिसका मैंने उल्लेख किया है वह वह चीज है जिसे आप ढूंढ रहे हैं। यह केवल 'ए' तत्व प्राप्त करता है जिसमें' img' तत्व होता है जिसमें 'विशेष' वर्ग होता है। –