我正在使用 Notepad++ 和 XSLT 1.0 来转换 XML 文件。 有一个 Data.xml 文件和一个 Dict.xml 文件,后者保存字符串的翻译。我希望在输出中翻译 Data.xml 中的字符串。
数据.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Textabschnitt>
<Root ID="2050775654055586328">Administration</Root>
</Textabschnitt>
<Textabschnitt ID="13667714361645396460">All</Textabschnitt>
<Textabschnitt ID="4765748458590838957">Application</Textabschnitt>
<Textabschnitt>
<Tabelle>
<Zelle>
<Textabschnitt ID="14682159838120944212">Name</Textabschnitt>
</Zelle>
<Zelle>
<Textabschnitt ID="2960145709916589219">Status</Textabschnitt>
</Zelle>
</Tabelle>
</Textabschnitt>
</Root>
Dict.xml:
<?xml version="1.0" encoding="utf-8"?>
<DICT>
<DICT_ENTRY LANG_ID="ro">
<uicontrol id="2050775654055586328">Administrare</uicontrol>
</DICT_ENTRY>
<DICT_ENTRY LANG_ID="ro-RO">
<uicontrol id="13667714361645396460">Toate</uicontrol>
</DICT_ENTRY>
<DICT_ENTRY LANG_ID="ro-RO">
<uicontrol id="4765748458590838957">Aplicație</uicontrol>
</DICT_ENTRY>
<DICT_ENTRY LANG_ID="ro-RO">
<uicontrol id="14682159838120944212">Nume</uicontrol>
</DICT_ENTRY>
<DICT_ENTRY LANG_ID="ro-RO">
<uicontrol id="2960145709916589219">Stare</uicontrol>
</DICT_ENTRY>
</DICT>
输出应与 Data.xml 相同,但 Textabschnitt 元素的内容替换为 @id 属性标识的翻译。
我在网上和 O'Reilly 中查看了很多 document() 用法的示例。但是,我无法让它读取文件并输出它。
我一直在尝试的 XSLT(以及许多其他尝试)是:
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="translatedStrings" select="document('Localization_ro.xml')"/>
<!--Identity template, provides default behavior that copies all content into the output -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- replace string with translated string, identified with ID (first attempt) -->
<xsl:template match="//@ID">
<xsl:variable name="id" select="." />
<xsl:attribute name="id">
<xsl:value-of select="$id"/>
</xsl:attribute>
<xsl:value-of select="$translatedStrings/DICT/DICT_ENTRY/uicontrol[@id=$id][1]"/>
</xsl:template>
</xsl:stylesheet>
这个特定的输出会生成一个空白文件,我认为这是最后一个
xsl:value-of
语句有问题。
我确信我正在做一些非常基本且错误的事情,但不确定是什么。任何有关正确方法和语法的指示都将非常感激。谢谢你。
编辑:为了清楚起见,我想要的输出是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Textabschnitt>
<Root ID="2050775654055586328">Administrare</Root>
</Textabschnitt>
<Textabschnitt ID="13667714361645396460">Toate</Textabschnitt>
<Textabschnitt ID="4765748458590838957">Aplicație</Textabschnitt>
<Textabschnitt>
<Tabelle>
<Zelle>
<Textabschnitt ID="14682159838120944212">Nume</Textabschnitt>
</Zelle>
<Zelle>
<Textabschnitt ID="2960145709916589219">Stare</Textabschnitt>
</Zelle>
</Tabelle>
</Textabschnitt>
</Root>
我认为你想做类似的事情:
<xsl:template match="Textabschnitt[@ID]">
<xsl:variable name="id" select="@ID" />
<Textabschnitt ID="{$id}">
<xsl:value-of select="$translatedStrings/DICT/DICT_ENTRY/uicontrol[@id=$id]"/>
</Textabschnitt>
</xsl:template>
顺便说一句,如果您使用的是 XSLT 1.0,您的样式表不应声明
version="2.0"
。