Ubuntu ve / veya CentOS için, bir XPath tek satırını çalıştırabilen foo //element@attribute filename.xmlveya foo //element@attribute < filename.xmlsonuçları satır satır döndürebilen bir komut satırı aracına sahip bir paket var mı?
Sadece apt-get install fooya da yum install foosonra kutudan çıkar çıkmama izin verecek bir şey arıyorum , ambalaj yok ya da başka bir uyarlamaya gerek yok.
Yaklaşan şeylere bazı örnekler:
Nokogiri. Bu sarmalayıcıyı yazarsam, sarmalayıcıyı yukarıda açıklanan şekilde çağırabilirim:
#!/usr/bin/ruby
require 'nokogiri'
Nokogiri::XML(STDIN).xpath(ARGV[0]).each do |row|
puts row
end
XML :: XPath. Bu sarmalayıcı ile çalışır:
#!/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'dan çok fazla gürültü geliyor -- NODE --ve attribute = "value".
xml_grep from XML :: Twig öğeleri döndürmeyen ifadeleri işleyemez, bu nedenle daha fazla işlem yapmadan öznitelik değerlerini ayıklamak için kullanılamaz.
DÜZENLE:
echo cat //element/@attribute | xmllint --shell filename.xmlbenzer gürültüyü döndürür xpath.
xmllint --xpath //element/@attribute filename.xmldöner attribute = "value".
xmllint --xpath 'string(//element/@attribute)' filename.xml istediğimi döndürüyor, ama sadece ilk maç için.
Soruyu neredeyse tatmin eden başka bir çözüm için, rastgele XPath ifadelerini değerlendirmek için kullanılabilecek bir XSLT (dyn gerektirir: XSLT işlemcideki desteği değerlendirin):
<?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>
İle çalıştırın xsltproc --stringparam pattern //element/@attribute --stringparam value . arbitrary-xpath.xslt filename.xml.
xpathSTDOUT değil, STDERR üzerinde olduğunu unutmayın .