Xml 在键查找后应用模板
我有这样一个XML文件:Xml 在键查找后应用模板,xml,xslt,Xml,Xslt,我有这样一个XML文件: <root> <texts> <text id='1' lang='en'>Hello <name/>, how are you today?</text> <text id='1' lang='de'>Hallo <name/>, wie geht es Ihnen heute?</text> </texts> <items>
<root>
<texts>
<text id='1' lang='en'>Hello <name/>, how are you today?</text>
<text id='1' lang='de'>Hallo <name/>, wie geht es Ihnen heute?</text>
</texts>
<items>
<item textId='1'><name>Some Name</name></item>
</items>
</root>
你好,今天好吗?
喂,你有什么事吗?
某个名字
我需要做的是在选择一种语言后得到一个带有填写名称的文本。到目前为止,我的想法是:
<xsl:variable name="lang" select="'de'" />
<xsl:key name="textKey" match="text" use="@id" />
<xsl:template match="items">
<xsl:value-of select="key('textKey', @text)[@lang=$lang]"/>
</xsl:template>
现在我不知道如何替换“text”节点中的“name”?有人知道怎么做吗?试试以下方法:
<xsl:variable name="lang" select="'de'" />
<xsl:key name="textKey" match="text" use="concat(@id, '|', @lang)" />
<xsl:template match="item">
<xsl:apply-templates select="key('textKey', concat(@textId, '|', $lang))">
<xsl:with-param name="name" select="."/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="text">
<xsl:param name="name"/>
<xsl:apply-templates>
<xsl:with-param name="name" select="$name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="name">
<xsl:param name="name"/>
<xsl:value-of select="$name"/>
</xsl:template>
谢谢您的回复。如果被替换的东西在句子的中间,比如:“你好,你好吗?”,我遇到了一个新的问题,那该怎么办呢?如果您需要替换多种类型的标记,这将如何工作?用同样的方法说:将值作为参数传递,并为每个元素创建一个模板。请注意,在XSLT2.0+中,这可以通过其“tunnel”参数稍微简化。谢谢。它现在可以工作了,“tunnel”参数使它变得更好。这不是一个格式良好的输入XML-我想应该是
?完整的样式表和预期的输出也会很有帮助-请参阅。对不起,我已经解决了XML问题。