2017-09-20 69 views
0

下午好,Saxon 9.8:EXPath File Module功能文件支持哪些模式:列表?

我正在使用Java Saxon 9.8.0.4。我想用其第三個「模式」參數使用EXPath文件模塊函數「file:list」。但我懷疑,支持哪種模式。

我看過Saxon documentationEXPath documentation。但我不知道,Saxon 9.8.0.4支持哪些模式。支持正則表達式會很棒,但我知道對於大多數用戶來說它是過度的。我嘗試了幾個盲目的測試,但只是*和?如EXPath documentation中定義的,wildchars適用於我。

是的,我可以非常容易地在for-each中進行regexp後處理,但要更多地瞭解list函數可能會有所幫助。

預先感謝您的幫助,斯捷潘

PS:我用例是讓所有的文件沒有擴展名(「測試」,而不是「的test.txt」)從大而深的目錄結構和遞歸使用XSL-T 3.0處理所有匹配的文件。大多數這樣的文件具有相同的文件名,因此我不能做「複製到一個文件夾」預處理薩克森的-s:目錄-o:目錄一次調用和調用Java(撒克遜)每個文件是可怕的時間高架。因此,我想將所有匹配的文件按順序讀取,並使用for-each(文件是文本文件並使用未解析文本讀取它們)處理每個這樣的序列項目。不,GAWK不是解決方案,因爲我已經在XSL-T中實現了從XML到SQL的所有轉換基礎架構,因爲95%的文件都是XML。

--ADDED代碼及以下的解釋:我的測試文件

例。

XML文件 「A.XML」:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="a.xsl"?> 
<root/> 

XSL-T文件 「a.xsl」:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:saxon="http://saxon.sf.net/" 
    xmlns:expathFile="http://expath.org/ns/file" 
    exclude-result-prefixes="xs saxon" 
    version="3.0"> 
    <xsl:output method="text" /> 
    <xsl:template match="/root"> 
    <xsl:variable name="list" select="expathFile:list('C:\temp\temp\test\', false(), '^.*$')"/> 
    <xsl:for-each select="$list"> 
     <xsl:value-of select="."/> 
    </xsl:for-each> 
    </xsl:template> 

我的文件夾 「C:\ TEMP \ TEMP \測試\」 載6個測試文件:a.txt,b.txt,c.txt,e,f,g。

但在經過對「http://www.regexplanet.com/advanced/java/index.html」的聯機Java RegExp測試程序的測試後,我發現問題完全在我身邊,因爲Java正則表達式與PCRE(Perl),sed和gawk正則表達式的行爲有些不同。所以這是我的錯,我需要學習Java正則表達式。

回答

1

撒克遜使用相同的碼本模式作爲在選擇=「圖案」過濾器中收集的URI,其在http://www.saxonica.com/documentation/index.html#!sourcedocs/collections

描述提取的相關細節:

中使用的圖案select參數可以使用類似glob的語法,例如 示例*.xml選擇擴展名爲「xml」的所有文件。更一般地, 圖案通過預先"^", 追加"$",通過".*"通過"\."替換".""*",和"?"通過".?", 轉換爲正則表達式,然後將其用於匹配出現在目錄 的文件名使用Java正則表達式規則。因此,例如,您可以 編寫?select=*.(xml|xhtml)以將文件與這兩個 文件擴展名中的任意一個匹配。但請注意,URL 中使用的特殊字符(即URI的查詢部分中允許使用的反斜槓和花括號不是 的字符)必須使用%HH 約定進行轉義。例如,垂直條需要寫成%7C。這個 轉義可以使用encode-for-uri()函數來實現。

請注意,Saxon的collection()函數現在還支持URI中的匹配=模式,其中模式是標準XPath 3.1正則表達式。

+0

我非常抱歉,但即使經過大量嘗試,我也無法使其工作。我的代碼是: 當我嘗試更改'*'爲例如'。*'或'^。* $'它仍然不起作用。 –

+0

我擔心wiki系統可能損壞了您的示例代碼。請在反引號之間再次輸入。 –