我運行以下變換:命名空間防止變換
java -jar saxon9.jar -it:main -xsl:my.xsl dir="ca-ES"
的「CA-ES」包含具有下列根元素XLIFF文件:
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cba="http://www.softcon.de/XML-schema/de.softcon.cba.itembuilder.xliff-supplement"
version="1.1"
xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.1 xliff-core-1.1.xsd">
變換從使用相同的文件輔助輸入文件夾並生成與輸入文件夾中找到的許多結構相同的文件。
如果我從根目錄(即xliff
)中刪除第一個名稱空間(即xmlns="urn:oasis:names:tc:xliff:document:1.1"
),那麼轉換就像一個魅力。但是,如果我保留它,那麼它不起作用。
不工作的部分是,在主輸入文件匹配source
,並從二次輸入文件與source
替換它)的模板:
<xsl:copy-of select="key('ref', ../@id, doc($secondary-input))/source" />
如果不工作,我的意思是,source
從主要輸入文件位於輸出中,而不是來自輔助輸入的預期source
節點。所以看起來命名空間正在阻礙匹配。
尋找我已經嘗試了樣式表的文檔元素添加xpath-default-namespace
屬性的解決方案:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="urn:oasis:names:tc:xliff:document:1.1"
version="2.0">
但隨後從主輸入source
節點保持在輸出(即,它不被替換與二次輸入的一個)。
我自己也嘗試加入這個前綴,然後用它在樣式表來匹配節點(例如match="xlf:source"
),但後來沒有source
節點在所有輸出:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlf="urn:oasis:names:tc:xliff:document:1.1"
version="2.0">
我會感謝一些提示。
我使用的是XSLT 2.0和saxonb9-1-0-8j。
UPDATE
添加一個主輸入文件樣品(命名爲ca-ES_blabla.xlf
,從文件夾取CA-ES):
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cba="http://www.softcon.de/XML-schema/de.softcon.cba.itembuilder.xliff-supplement" version="1.1" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.1 xliff-core-1.1.xsd">
<file datatype="html" original="project.properties" source-language="ca">
<body>
<trans-unit id="MDSD_0" xml:space="default">
<source>Gestiona les adreces d'interès</source>
<target>Gestiona les adreces d'interès</target>
<context-group name="era">
<context context-type="x-property-id">bookmarkHeaderText</context>
</context-group>
</trans-unit>
<trans-unit id="7" xml:space="default">
<source><b>Sempre rebrà un avís quan arribi a un punt a partir del qual no pugui tornar enrere.</b><br /></source>
<target><b>Sempre rebrà un avís quan arribi a un punt a partir del qual no pugui tornar enrere.</b><br /></target>
<prop-group name="item_description">
<prop prop-type="x-inquiry-nr">4</prop>
<prop prop-type="x-type">question</prop>
</prop-group>
</trans-unit>
</body>
</file>
<!-- the xliff document might contain several <file> nodes -->
</xliff>
一個次級輸入文件樣品(命名爲en-GB_blabla.xlf
,取自文件夾en-GB):
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cba="http://www.softcon.de/XML-schema/de.softcon.cba.itembuilder.xliff-supplement" version="1.1" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.1 xliff-core-1.1.xsd">
<file datatype="html" original="project.properties" source-language="en-GB">
<body>
<trans-unit id="MDSD_0" xml:space="default">
<source>Manage your bookmarks</source>
<target>Manage your bookmarks</target>
<context-group name="era">
<context context-type="x-property-id">bookmarkHeaderText</context>
</context-group>
</trans-unit>
<trans-unit id="7" xml:space="default">
<source><b>You will always receive a warning before reaching a point where you cannot go back.</b><br /></source>
<target><b>You will always receive a warning before reaching a point where you cannot go back.</b><br /></target>
<prop-group name="item_description">
<prop prop-type="x-inquiry-nr">4</prop>
<prop prop-type="x-type">question</prop>
</prop-group>
</trans-unit>
</body>
</file>
<!-- the xliff document might contain several <file> nodes -->
</xliff>
和樣式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="urn:oasis:names:tc:xliff:document:1.1"
version="2.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<!-- run as:
$> java -jar saxon9.jar -it:main -xsl:this_stylesheet.xsl dir="xx-XX" -->
<!-- this captures the folder parameter given in the call -->
<xsl:param name="dir" select="dir" />
<!-- this template iterates through the files in the input folder -->
<xsl:template name="main">
<xsl:variable name="input-files" select="concat($dir, '?select=*.xlf')" />
<xsl:apply-templates select="collection($input-files)"/>
</xsl:template>
<!-- this template defines the name of the output folder and files -->
<xsl:template match="/">
<xsl:variable name="output-name" select="replace(
tokenize(document-uri(/), '/')[last()],
'(.+)\.xlf',
'$1_bilingual.xlf'
)"/>
<xsl:result-document href="{$dir}_output/{$output-name}">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:template>
<!-- this template fetches the source from the English files -->
<xsl:key name="ref" match="trans-unit" use="@id"/>
<xsl:template match="source">
<xsl:variable name="input-uri" select="document-uri(/)" />
<!-- <xsl:message><xsl:value-of select="$input-uri" /></xsl:message> -->
<xsl:variable name="secondary-input" select="replace($input-uri, $dir, 'en-GB')"/>
<xsl:copy-of select="key('ref', ../@id, doc($secondary-input))/source" />
</xsl:template>
<!-- this part generates the output -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
做兩個輸入文件(主要拉在收集和二次與文檔被拉)使用完全相同的命名空間? –
嗨馬丁:)是的,主要和次要輸入文件是相同的,除了'源'節點的內容。 – msoutopico
您可能需要添加樣式表和兩個輸入示例,以便我們在您自己找不到問題時進行調試,我認爲它必須是兩個文件之間的命名空間差異。 –