Ubuntu 및 / 또는 CentOS 용 XPath one-liner를 실행 foo //element@attribute filename.xml
하거나 foo //element@attribute < filename.xml
한 줄씩 결과를 반환 할 수있는 명령 줄 도구가있는 패키지가 있습니까?
나는 단지 apt-get install foo
또는 yum install foo
즉시 사용할 수 있고 래퍼 또는 다른 적응이 필요없는 것을 찾고 있습니다.
다음은 가까이 오는 것들의 예입니다.
노코 기리. 이 래퍼를 작성하면 위에서 설명한 방식으로 래퍼를 호출 할 수 있습니다.
#!/usr/bin/ruby
require 'nokogiri'
Nokogiri::XML(STDIN).xpath(ARGV[0]).each do |row|
puts row
end
XML :: 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
from 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
내가 원하는 것을 반환하지만 첫 번째 일치에 대해서만.
거의 모든 질문을 충족시키는 다른 솔루션을 위해 임의의 XPath 표현식을 평가하는 데 사용할 수있는 XSLT가 있습니다 (XSLT 프로세서에서 dyn : evaluate 지원 필요).
<?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
는 STDOUT이 아니라 STDERR에 있습니다.