2016-11-22 48 views
1

我正在將一些XSLT(更具體地說是schematron驗證規則)從使用Altova轉換爲Saxon.NET(Saxon-HE版本=「9.7.0.4」)作爲XSLT處理器。但是,我遇到了一個我無法找到解決方案的問題。撒克遜和文檔函數

問題出在文檔()函數。在我的XSLT中,我有:

<sch:let name="params" value="document('https://some_web_address')"/> 

此URL帶回了XSLT使用的參數XML。 問題是,這部作品在Altova的,但是不工作(返回空),當我開始使用Saxon.NET

試圖DOC可用()/未解析文本可用()功能後,似乎沒有任何返回來自URL的XML。但是,如果我創建了返回的xml數據的xml文件,請將其放置在本地目錄(本地爲我的XSLT)並指定xslt的完整路徑,但函數返回true,但doc-available()仍然返回false。我甚至創造了一個小假XML示例:

<?xml version="1.0" encoding="UTF-8"?> 
<parameters> 
    <parameter>100</parameter> 
</parameters> 

XML是有效的,但帶回來完全相同的結果(DOC可用() =假,未解析文本可用() =真)

我已經看過這裏的一些其他相關問題(XSLT Document() Function results in Saxon Error/ Attribute-String cant be used as Filepath),但沒有一個完全解決了我的問題。

這個問題可能需要做的XSLT板的基URI的東西,所以我跑:(。) 基URI靜態基-URI()兩者返回空。

所以我的問題是:

  • 是可以使用一個URL(網頁URI)作爲參數傳遞給文件()與Saxon.NET?
  • 如果不是,我在做什麼錯誤,其中doc-available()爲false,但unparsed-text-available()對有效的xml文件返回true(如上所示)?

對我來說,理想的解決方案是使用URL,但可以降級爲使用本地文件。如果有人能幫助我,我將不勝感激。

+1

你可以發佈一個最小的,但完整的樣式給人錯誤,加上樣本數據?我把你的虛擬XML樣本放入一個文件'test2016112201.xml'到一個樣式表中,該文件用'doc-available($ doc1-uri)'和'doc($ doc1-uri)/ parameters/parameter'訪問該文件,然後用Saxon .NET 9.7 EE和HE運行它,結果是'true ',這樣工作正常。我只需爲該測試運行'transform.exe'。目前尚不清楚您是使用命令行工具還是某些.NET代碼,但您可能想要更詳細地解釋和顯示如何使用Saxon .NET。 –

+0

如果unparsed-text-available()爲true,但doc-available()爲false,那麼解析XML就是某種問題。這是一個奇怪的;可能是由於某種配置設置。需要了解更多關於如何運行它(例如,從命令行或C#應用程序)。使用document()會比doc-available()提供更好的診斷,只會返回true或false,並不會告訴你爲什麼。 –

回答

0

好吧,在經過了很長時間的研究之後,結果證明我真的很愚蠢。

問題是,在代碼中我們使用Saxon.NET我們設置:

xsltExecutable.InputXmlResolver = null 

一些未知的原因。它應該是

xsltExecutable.InputXmlResolver = new XmlUrlResolver(); 

因爲XmlUrlResolver是從外部來源提取數據的東西。

我試圖設置一個小的schematron測試用例,它在命令行中工作正常,但在.NET應用中無法正常工作。

這篇文章還幫助:How to use the XSLT fn:document function in Saxon-HE to read an XML string?

謝謝你們