नोट: निम्न जानकारी XPath 1.0 के उपयोग मान लिया गया है।
निम्नलिखित अभिव्यक्ति सबसे बड़ा id
मूल्य के साथ तत्व (रों) देता है:
/*/book[not(@id < preceding-sibling::book/@id) and
not(@id < following-sibling::book/@id)]
ध्यान दें कि यह थोड़ा अलग से है कि में @ timbooo का जवाब जब वहाँ के साथ डुप्लिकेट हैं इस एक से अधिक तत्व वापस आ जाएगी है वही अधिकतम मूल्य (@ timbooo कोई भी वापस नहीं करेगा)। यदि आप इस मामले में केवल एक तत्व चाहते हैं, तो आपको एक रिज़ॉल्यूशन रणनीति की आवश्यकता है। दस्तावेज़ के क्रम में इस तरह की पहली तत्व का चयन करने के लिए, इस का उपयोग करें:
/*/book[not(@id < preceding-sibling::book/@id) and
not(@id < following-sibling::book/@id)][1]
पिछले एक का चयन करने के लिए, इस का उपयोग करें:
/*/book[not(@id < preceding-sibling::book/@id) and
not(@id < following-sibling::book/@id)][last()]
यह दृष्टिकोण बहुत अक्षम (O(n^2)
) क्योंकि यह तुलना करने के लिए आप की आवश्यकता है प्रत्येक तत्व प्रत्येक अन्य संभावित अधिकतम करने के लिए। इस कारण से, अधिकतम तत्व का चयन करने के लिए शायद अपनी मेजबान प्रोग्रामिंग भाषा का उपयोग करना सबसे अच्छा है। बस पहले book
तत्वों का चयन करें और फिर उस सूची से अधिकतम चुनें। यह (सबसे अधिक संभावना) एक रैखिक ऑपरेशन (O(n)
) है, जो बहुत बड़े दस्तावेज़ों पर काफी तेजी से होगा। उदाहरण के लिए, जावा (JAXP) में आप इसे इस प्रकार कर सकते हैं:
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList) xpath.evaluate("/*/book", doc,
XPathConstants.NODESET);
Node max = nodes.item(0);
for (int i = 0; i < nodes.getLength(); i++) {
int maxval = Integer.parseInt(max.getAttributes()
.getNamedItem("id").getNodeValue());
int curval = Integer.parseInt(nodes.item(i).getAttributes()
.getNamedItem("id").getNodeValue());
if (curval >= maxval)
max = nodes.item(i);
}
System.out.println(max.getAttributes().getNamedItem("name"));
ध्यान दें कि यह सिर्फ एक प्रदर्शन है; जहां उचित हो वहां नल-चेक शामिल करना सुनिश्चित करें।
स्रोत
2012-01-03 02:05:12
+1, अनानस के लिए: पी –
XPath निष्पादित करने के लिए आपकी मेजबान भाषा क्या है? यदि आप XPath 1.0 का उपयोग कर रहे हैं (जिसमें 'अधिकतम' फ़ंक्शन नहीं है) तो पहले सभी तत्वों का चयन करने और अपने पीएल में अधिकतम खोजने के लिए शायद तेज़ है। –
मैं पर्ल 5.10 का उपयोग कर रहा हूं। – HerbSpiral