2013-02-18 69 views
3

通過使用程序BaseX,我能夠使用XPath和XQuery來查詢位於我的主目錄的XML文檔,但是我遇到了問題在XSLT中也是如此。BaseX:在哪裏聲明執行查詢的XML文檔

我在查詢的文檔是BookstoreQ.xml

XPath的版本,運行完全正常:

doc("/home/ioannis/Desktop/BookstoreQ.xml")/Bookstore/Book/Title 

XSLT代碼,我想執行:

<xsl:stylesheet version = "2.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method= "xml" indent = "yes" omit-xml-declaration = "yes" /> 
    <xsl:template match = "Book"></xsl:template> 
</xsl:stylesheet> 

我讀BaseX' documentation on XSLT,但沒能找到解決的辦法。我如何運行給定的XSLT?

+0

您有沒有看過[BaseX的XSLT文檔](http://docs.basex.org/wiki/XSLT_Module)?請提供更多關於您想要做什麼以及代碼如何的信息,您的問題很難回答。 – 2013-02-18 23:07:26

+0

@Jens Erat是的,我閱讀BaseX的XSLT文檔,但是我找不到解決方案。我想查詢的文檔位於BaseX編輯器中的XPath桌面上,我編寫'doc(「/ home/ioannis/Desktop/BookstoreQ.xml」)/ Bookstore/Book/Title'我的問題在XSLT中,我有編寫我想通過' ' – 2013-02-19 19:38:24

+0

我編輯了你的新信息到你的問題。下次發佈問題時,請在問題中提供所有相關信息(包括預期的輸入/輸出),您將得到更快的答案。親切的問候,Jens – 2013-02-19 20:07:19

回答

3

BaseX沒有直接支持XSLT,你必須使用XQuery函數來調用它(雖然這很容易)。這樣做有兩個功能,一個用於返回XML節點(xslt:transform(...)),一個用於將文本作爲字符串返回(xslt:transform-text(...))。你需要第二個。

xslt:transform-text(doc("/home/ioannis/Desktop/BookstoreQ.xml"), 
    <xsl:stylesheet version = "2.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method= "xml" indent = "yes" omit-xml-declaration = "yes" /> 
    <xsl:template match = "Book"></xsl:template> 
    </xsl:stylesheet> 
) 

兩者既可以與XSLT作爲節點(這裏使用的)調用,通過使其爲一個字符串或給予路徑包含XSLT代碼的文件。

+0

錯誤:在/ home/ioannis/Desktop/file第1行停止: [XPST0017]未知函數'xslt:transform-text(...)'。 查詢:xslt:transform-text(doc(「/ home/ioannis/Desktop/BookstoreQ.xml」), ) – 2013-02-20 17:13:57

+0

您是否使用最新版本的BaseX?剛剛意識到,這個功能就是今年在BaseX 7.6上發佈的。 – 2013-02-20 17:46:29

+0

在Ubuntu的軟件中心有7.3版本,所以我切換到Windows使用7.6現在可以工作,但輸出有點奇怪:<BookTitle>數據庫系統第一門課</BookTitle&gt而不是數據庫系統第一門課程 2013-02-22 05:50:57