SORU
17 Mart 2013, Pazar


Nasıl kabuğundan tek gömlekleri XPath çalıştırma?

Orada bir paket var, o da işletim sistemi ve/veya Otomotiv, öyle bir komut satırı aracı yürütmek bir XPath oyunu gibi foo //element@attribute filename.xml foo //element@attribute < filename.xml ve dönüş sonuçları satır satır?

Bana sadece 6 ** sağlayacak bir şey arıyorum ya da yum install foo ve sadece out-of-the-kutu, ambalaj kağıtları veya diğer uyarlama hayır gerekli çalışır.

Burada yakın olan şeyler bazı örnekler:

Nokogiri. Eğer yazarsam bu, yukarıda açıklandığı şekilde sarıcı arayabilirim sarıcı:

#!/usr/bin/ruby

require 'nokogiri'

Nokogiri::XML(STDIN).xpath(ARGV[0]).each do |row|
  puts row
end

::XML XPath. Bu sarı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");
}

xpath XML::XPath verir çok fazla gürültü, -- NODE -- attribute = "value".

xml_grep:: XML Dal olamaz elemanları döndüren ifadeler işlemek, daha fazla işlem olmadan nitelik değerleri ayıklamak için kullanılır.

DÜZENLEME:

echo cat //element/@attribute | xmllint --shell filename.xml gürültü xpath benzer döndürür.

xmllint --xpath //element/@attribute filename.xml attribute = "value" döndürür.

xmllint --xpath 'string(//element/@attribute)' filename.xml istiyorum, ama sadece ilk maç için döndürür.

Başka bir çözüm neredeyse soruya tatmin etmek için, burada keyfi XPath ifadeleri (XSLT işlemci dyn:değerlendirme desteği gerektirir) değerlendirmek için kullanılan bir 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 ile çalıştırın.

CEVAP
17 Mart 2013, Pazar


Bu araçlar denemelisiniz :

  • xmlstarlet
  • xmllint
  • saxon-lint

xmllint xmlstarlet xmlstarlet libxml2-utils (--shell anahtarı ile etkileşimli kabuk olarak kullanılabilir) ile birlikte gelir.

saxon-lint SaxonHE 9.6 XPath 3.x ( retro uyumluluk) olanlar XPath 1.x çalışma Diğerleri çalıştırmak için sadece bir tanesidir.

Ex :

xmllint --xpath '//element/@attribute' file.xml
xmlstarlet sel -t -v "//element/@attribute" file.xml
saxon-lint --xpath '//element/@attribute' file.xml

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • B3ASTTY™

    B3ASTTY™

    27 Mayıs 2013
  • How To Cook That

    How To Cook

    16 NİSAN 2011
  • Ownage Pranks

    Ownage Prank

    13 AĞUSTOS 2007