道歉,如果这被视为“gimme the codez”类型的问题,但我的xpath技能在这方面没有达到标准。在我看来,通用性足以引起更多人的兴趣
鉴于此下面的多语言XML文件。我们需要用他们的英语同胞元素替换空白的荷兰语条目。
输入:
<Testing>
<T4 t="dutch"></T4>
<T4 t="english">Testing Software</T4>
<T4 t="french"/>
<T4 t="italian"/>
</Testing>
<P>
<T1 t="dutch"></T1>
<T1 t="english">Testing Phase. </T1>
<T1 t="french"></T1>
<T1 t="italian"></T1>
</P>
输出:
<Testing>
<T4 t="dutch">
<trans>Testing Software</trans>
</T4>
<T4 t="english">Testing Software</T4>
<T4 t="french"/>
<T4 t="italian"/>
</Testing>
<P>
<T1 t="dutch"><trans>Testing Phase.</trans></T1>
<T1 t="english">Testing Phase. </T1>
<T1 t="french"></T1>
<T1 t="italian"></T1>
</P>
答案 0 :(得分:1)
这应该有用......
XML输入(包含在input
中,格式正确)
<input>
<Testing>
<T4 t="dutch"></T4>
<T4 t="english">Testing Software</T4>
<T4 t="french"/>
<T4 t="italian"/>
</Testing>
<P>
<T1 t="dutch"></T1>
<T1 t="english">Testing Phase. </T1>
<T1 t="french"></T1>
<T1 t="italian"></T1>
</P>
</input>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[@t='dutch'][not(node())]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<trans><xsl:value-of select="normalize-space(../*[@t='english'])"/></trans>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<input>
<Testing>
<T4 t="dutch">
<trans>Testing Software</trans>
</T4>
<T4 t="english">Testing Software</T4>
<T4 t="french"/>
<T4 t="italian"/>
</Testing>
<P>
<T1 t="dutch">
<trans>Testing Phase.</trans>
</T1>
<T1 t="english">Testing Phase. </T1>
<T1 t="french"/>
<T1 t="italian"/>
</P>
</input>