क्या उबंटू और / या सेंटोस के लिए कोई पैकेज है, जिसमें एक कमांड-लाइन टूल है जो XPath वन-लाइनर को निष्पादित कर सकता है foo //element@attribute filename.xmlया foo //element@attribute < filename.xmlलाइन द्वारा परिणाम पंक्ति को वापस कर सकता है?
मैं एक ऐसी चीज की तलाश कर रहा हूं, जो मुझे सिर्फ apt-get install fooया yum install fooफिर सिर्फ आउट-ऑफ-द-बॉक्स, कोई रैपर या अन्य अनुकूलन करने की अनुमति देती है।
यहाँ चीजों के कुछ उदाहरण हैं जो करीब आते हैं:
Nokogiri। अगर मैं इस रैपर को लिखता हूं तो मैं ऊपर वर्णित तरीके से रैपर को कॉल कर सकता हूं:
#!/usr/bin/ruby
require 'nokogiri'
Nokogiri::XML(STDIN).xpath(ARGV[0]).each do |row|
puts row
end
एक्सएमएल :: XPath। इस आवरण के साथ काम करेंगे:
#!/usr/bin/perl
use strict;
use warnings;
use XML::XPath;
my $root = XML::XPath->new(ioref => 'STDIN');
for my $node ($root->find($ARGV[0])->get_nodelist) {
print($node->getData, "\n");
}
xpathXML से: XPath बहुत अधिक शोर देता है, -- NODE --और attribute = "value"।
xml_grep XML से: Twig उन तत्वों को नहीं संभाल सकता है जो तत्वों को वापस नहीं करते हैं, इसलिए आगे की प्रक्रिया के बिना विशेषता मान निकालने के लिए उपयोग नहीं किया जा सकता है।
संपादित करें:
echo cat //element/@attribute | xmllint --shell filename.xmlके समान शोर देता है xpath।
xmllint --xpath //element/@attribute filename.xmlलौटता है attribute = "value"।
xmllint --xpath 'string(//element/@attribute)' filename.xml मुझे जो चाहिए, वह लौटाओ, लेकिन केवल पहले मैच के लिए।
एक और समाधान के लिए लगभग प्रश्न को पूरा करने के लिए, यहाँ एक XSLT है जिसका उपयोग मनमाने ढंग से XPath अभिव्यक्तियों के मूल्यांकन के लिए किया जा सकता है (इसके लिए dyn की आवश्यकता है: XSLT प्रोसेसर में समर्थन का मूल्यांकन करें):
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:dyn="http://exslt.org/dynamic" extension-element-prefixes="dyn">
<xsl:output omit-xml-declaration="yes" indent="no" method="text"/>
<xsl:template match="/">
<xsl:for-each select="dyn:evaluate($pattern)">
<xsl:value-of select="dyn:evaluate($value)"/>
<xsl:value-of select="' '"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
के साथ भागो xsltproc --stringparam pattern //element/@attribute --stringparam value . arbitrary-xpath.xslt filename.xml।
xpathSTDERR पर है न कि STDOUT पर।