2013-05-27 22 views
0

这里是我的XML文件:如何分配XSLT变量与XML属性

<Veranstaltungen xmlns="urn:schemas-etourist:Veranstaltung"> 
    <Veranstaltung attribute1="xyz" attribute2="xyz"> 
     <OBJECT> 
      <string xmlns="urn:eTourist:i18n" xml:lang="de-DE">GERMAN TEXT</string> 
      <string xmlns="urn:eTourist:i18n" xml:lang="en-GB">ENGLISH TEXT</string> 
      <string xmlns="urn:eTourist:i18n" xml:lang="cs-CZ">CZECH TEXT</string> 
     </OBJECT> 
... 

在这里,我的XSLT变量:

... 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:td="urn:schemas-etourist:Veranstaltung" 
xmlns:td2="urn:schemas-etourist:SchemaExtension" 
xmlns:td3="urn:eTourist:i18n" 
    xmlns:php="http://php.net/xsl" 
extension-element-prefixes="php"> 
... 
<xsl:variable name="german"> 
<xsl:value-of select="td:OBJECT/td3:string[@xml:lang='de-DE']"></xsl:value-of> 
</xsl:variable> 

<xsl:variable name="english"> 
<xsl:value-of select="td:OBJECT/td3:string[@xml:lang='en-GB']"></xsl:value-of> 
</xsl:variable> 
... 

变量 '德' 填写正确,无论其可变 '英语'填充了德语文本值。我们如何用ENGLISH TEXT值填充变量'english'?

非常感谢您的帮助!

+1

根据您发布的内容,您的'$ english'变量应该具有“ENGLISH TEXT”值。虽然,您的源XML似乎并没有绑定到'“和”“元素的不同名称空间。 'td'和'td3'命名空间前缀绑定到相同的命名空间还是不同的?您可能需要发布更完整的示例来帮助解决问题。 –

+0

除了像Mads说的那样,您在XSLT中有两个不同的名称空间,而XML只有一个,所以您发布的内容没有任何问题。你需要发布一个更完整的记录你正在做的事情。 – Borodin

+0

感谢Mads和Borodin的快速反应。编辑了正在使用的命名空间的问题。希望这有助于找到问题。 –

回答

0

尝试使用lang() function,其被设计为匹配这样的语言,同时考虑范围(记住一个xml:lang属性适用于所有后代元件以及其上所指定的属性的元素):

<xsl:variable name="german"> 
<xsl:value-of select="td:OBJECT/td3:string[lang('de')]"></xsl:value-of> 
</xsl:variable> 

<xsl:variable name="english"> 
<xsl:value-of select="td:OBJECT/td3:string[lang('en')]"></xsl:value-of> 
</xsl:variable> 
+0

完美的作品。谢谢您的帮助! –