क्या उबंटू और / या सेंटोस के लिए कोई पैकेज है, जिसमें एक कमांड-लाइन टूल है जो 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");
}
xpath
XML से: 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
।
xpath
STDERR पर है न कि STDOUT पर।