我必须从translation.xml
中选择文字并更新skeleton.xml
各自(@xid
= @id
个)节点。换句话说,如果@id
的{{1}}与translation.xml
的{{1}}匹配,则文字内容应放在@xid
下(如果有子元素,则为+文本内容(内联元素skeleton.xml
,skeleton.xml
等)也应该放在相应的父元素中:有关详细信息,请参阅下面的示例:
注意:内联元素可以是skeleton.xml中的任何内容(它不限于b或i,因此它应该是通用的)
skeleton.xml
i
translation.xml
b
UpdatedSkeleton.xml
<root>
<para a="b" b="c">
<text xid="1">This is first para <b xid="2" a="c" b="d">This is bold <i xid="3" b="d" c="e">This is italics</i> rest of bold</b> rest of para</text>
</para>
<para><text xid="4">This is second para</text></para>
<para><text xid="5">This is unchanged para</text></para>
<para><text xid="6">This is unchanged para</text></para>
</root>
我正在尝试使用此代码,但面临的挑战是将内联内容的文本放在正确的位置:
<root>
<TU id="1">
<source>This is first para <g id="2" tagName="b">This is bold <g id="3" tagName="i">This is italics</g> rest of bold</g> rest of para</source>
<target>suum primum para <g id="2" tagName="b">Et hoc confidens, <g id="3" tagName="i">Hoc est, Te Deum</g> Reliqua autem audet,</g> reliqua autem verba haec</target>
</TU>
<TU id="4">
<source>This is second para</source>
<target>Hoc est secundum verba haec</target>
</TU>
</root>
答案 0 :(得分:0)
您可以将<text>
节点添加<xsl:copy>
到您的测试版块,然后使用xid
复制<xsl:attribute>
属性。对于未修改的节点,您可以使用<xsl:copy-of>
复制整个树,包括属性:
<xsl:when test="$doc//*[$skelID=@id]">
<xsl:copy>
<xsl:attribute name="xid">
<xsl:value-of select="$skelID"/>
</xsl:attribute>
<xsl:apply-templates select="$doc//*[$skelID=@id]/target"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
这也将复制<target>
元素。您可以删除它添加模板:
<xsl:template match="target">
<xsl:apply-templates/>
</xsl:template>
您也没有替换<g>
标记。我假设@tagName
属性说明它应该转化为什么。这应该这样做:
<xsl:template match="g">
<xsl:element name="{@tagName}">
<xsl:attribute name="xid">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
我可能错过了一些东西,但这可能会解决你的大多数问题。