生成动态xmlns

时间:2010-05-18 20:38:14

标签: xslt

我想动态生成xmlns属性。

我想在XSL中生成这个:

  

< Common:MainPageBase xmlns:Common =“clr-namespace: ThisPartIsDynamic ; assembly = ThisPartIsDynamic ”>   < /常用:MainPageBase>

我怎样才能在XSL中做到这一点?

谢谢, 亚历

更新

更确切地说,这是我需要生成的内容。我希望能够随变量更改的部分是“THISPARTISDYNAMIC”:

<Common:MainPageBase
  xmlns:Common="clr-namespace:THISPARTISDYNAMIC;assembly=THISPARTISDYNAMIC"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:df="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"
  xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"  
  xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
  xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  
  xmlns:uc="clr-namespace:THISPARTISDYNAMIC"
  mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480" 
  ></Common:MainPageBase>

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>

 <xsl:variable name="vDynamicPart1" select="'DynPArt1'"/>
 <xsl:variable name="vDynamicPart2" select="'DynPArt2'"/>

 <xsl:template match="/">

   <xsl:element name="Common:MainPageBase"
   namespace="clr-namespace:{$vDynamicPart1};assembly={$vDynamicPart2}"/>

 </xsl:template>
</xsl:stylesheet>

应用于任何XML文档(未使用)时,会产生所需的结果

答案 1 :(得分:1)

您可以动态设置元素的命名空间:

<param name="ns1" >http://localhost/ns1</param>
...
<xsl:element name="test" namespace="{$ns1}" >... </xsl:element>

但是这不会输出名称空间前缀 - 它会更改该元素的默认名称空间。

我认为没有办法用动态命名空间URI输出前缀。 类似于:<xyz:test xmlns:xyz="{$ns1}"> 完全按字面输出:<xyz:test xmlns:xyz="{$ns1}">

如果这确实是您需要的确切输出,那么我认为您要么 修改序列化程序,或只生成带占位符URI的输出 在输出xml文本上进行文本替换。

[XSLT不处理XML语法。它处理XML树。   解析输入并序列化输出超出了它的范围。 ]

答案 2 :(得分:1)