2011-10-25 53 views
2

我正在使用XSLT樣式表處理XML文件,並希望在給定模板被觸發時報告輸入行號。我可以使用支持SAX解析器的DOM(例如Java中的XOM),因此可以使用定位器。如何識別XSLT輸入或XPath中的行號?

或者,XSLT生成可應用於原始文檔的Xpath,因此至少對於人來說,可導致特定的行。

(實際的應用是檢測在XML錯誤條件,這是搜索使用XSLT)

+0

AFAIK,你不能。對不起:( – paulsm4

+0

)有一個擴展功能和/或元素可以使用的機會,但它是一個遠射。 –

+0

@ paulsm4感謝您的快速回復。創建黑客並不難想象 - 觸發時模板知道它的Xpath和DOM遍歷知道每個節點的Xpath,SAX/Dom構建器知道行號,所以有一種方法就是將行/列號作爲屬性添加到DOM中,所以也許有更好的方法 –

回答

6

撒克遜具有用於此的擴展。您可以在構建源代碼樹時設置一個選項來維護行號信息(例如,在命令行上輸入-l),如果設置了此選項,則可以使用擴展函數saxon:line-number()獲取關聯的行號在樹中有一個元素節點。

+0

@非常感謝。這是可以從Java內部以編程方式調用嗎?該應用程序具有足夠的獨立性,我認爲我很樂意使用擴展功能 –

+0

至於Saxon的NodeInfo接口有getLineNumber()方法,是的,它可以在Java中使用。但是,當然,Saxon的NodeInfo並不主要用於Java應用程序(它被設計爲供XSLT和XPath引擎使用)。 –