2012-01-25 44 views
3

編碼,我想我可以做一些XSL樣式表,然後把它作爲一個模板,參數選項與命令行撒克遜XSLT處理器來評估XPath表達式,如:如何使用撒克遜的XPath處理器W/O在Java中

<xsl:template match="/"> 
    <xsl:copy-of select="saxon:evaluate($xpath-param)"/> 
</xsl:template> 

而且另一種可能是使用他們的Java API:http://www.saxonica.com/documentation/xpath-api/intro.xml,但我不知道Java的

有沒有什麼辦法讓撒克遜評估命令行XPath表達式?
shell腳本就足夠了,太多,如果可能的話

更新:
瀏覽撒克遜documentation,我發現了XPathExample樣品。不幸的是,我無法使用它

回答

5

您可以從命令行運行Saxon(XQuery)。您可以通過指向具有使用-q的XPath/XQuery的文件來執行此操作,也可以使用-qs直接傳遞查詢字符串。

下面是使用-qs來處理一個簡單的XPath的例子:

input.xml中

<a> 
    <b id="x"/> 
    <b id="z"/> 
    <b id="x"/> 
</a> 

撒克遜命令行(I使用Saxon9-HE與測試)

java -cp "saxon9he.jar" net.sf.saxon.Query -s:"input.xml" -qs:"https://stackoverflow.com/a/b[@id='x']" -o:"results.xml" 

results.xml

<b id="x"/><b id="x"/> 

注:我做了我的輸出通過改變-qs到這樣的事情也形成:-qs:"<results>{/a/b[@id='x']}</results>"

更多的命令行選項,看看這裏:http://www.saxonica.com/html/documentation/using-xquery/commandline.html

+0

好的,謝謝。我剛開始學習XML,需要簡單的XPath 2.0處理器。我不知道我可以像那樣使用XQuery。 '/ usr/bin /'中的'saxon-xquery'是'java -classpath /usr/share/java/saxonb.jar net.sf.saxon.Query'的快捷方式'$ @「'無法在片段參數上執行,但像你的示例中的字面意思('saxon9he.jar')很好地工作。 – theta

1

由於@DevNull說,使用XQuery命令行是一個更好的選擇。從命令行提供XPath不會很有用,因爲XPath無法控制輸出的格式。 XPath是XQuery的一個子集,因此如果您選擇,您可以使用XQuery界面來評估XPath表達式。

請注意,當前版本的開源Saxon是Saxon-HE 9.4.0.2。您可以通過命令行中的-t選項找出您正在使用的版本。聽起來好像您可能已經發現與您的Linux發行版捆綁在一起的舊版本(Saxon-B),並且@prunge指出了一個更舊的版本(Saxon 6.5),它只支持XSLT 1.0和XPath 1.0。

+0

感謝您的輸入。版本是9.0.0.4 - 這是Ubuntu 11.04的默認版本。之後我從SourceForge下載了最新版本 - 我成功執行了XPath模式。我將只卸載Ubuntu版本並在/ usr/bin /中創建新的方便快捷方式。我似乎無法找到從輸出壓縮XML聲明的選項,你 – theta

+1

發現輸出方法可以用作參數,例如:'\!「method = text''in'bash'。在'sh'中不需要反斜槓 – theta

1

另一種選擇是在工具中使用XPath,例如oXygen。其XPath Builder View是用於構建和測試XPath表達式的非常方便的接口。該工具有一個Linux version,它內置了對Saxon和其他處理器(Xerces,LIBXML,XSV,MSXML4.0,MSXML .NET和SQC)的支持。

enter image description here

+0

當然,但這是商業化的Java軟件,它也需要高端機器纔能有用。對於XPATH評估,本地或通過HTTP,'saxon'或'xmllint'就足夠了,並且可以集成在任何工具/編輯器用戶熟悉的位置。 – theta

+1

它是商業的s/w;撒克遜人也是如此。 :-)像撒克遜一樣,oXygen是非常好的商業軟件,值得每一分錢,特別是如果你使用XML做各種工作。不,你不需要高端機器;我2歲的筆記本電腦運行它就好了。鑑於OP的要求,這是一個可行的選擇;更多的選擇更好。 –

+0

我不這麼認爲。還有各種商業和非商業產品可以執行XPATH,或使用已有的處理器來完成這項工作。氧氣遠沒有好的建議:1.它設計的目的不僅僅是XPATH,而且可能使用戶想要這樣做; 2.它至少需要具有很多RAM的良好多核CPU才能使用; 3.您可以自己購買新PC,以支付您從Java GUI使用XPATH處理器所付的錢,您可以從終端 – theta