2010-05-18 246 views
2

我想動態生成xmlns屬性。生成動態xmlns

我想在XSL生成此:

<常見:MainPageBase的xmlns:通用= 「CLR-名稱空間:ThisPartIsDynamic;裝配= 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> 

任何想法?

+0

好問題(+1)。查看我的答案獲得完整的解決方案。 :) – 2010-05-18 20:54:08

回答

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文檔(未使用)被應用時產生所期望的結果

+0

感謝您的回覆,但「ThisPartIsDynamic」不是動態的.. 我想這樣做 <通用:MainPageBase> 的 CLR-名稱空間:的;裝配= 但我知道我不能那樣做... – alexbf 2010-05-18 21:00:29

+0

@alexbf:對不起, t注意到這一點。我更新瞭解決方案並解決了您的問題。 – 2010-05-18 23:03:51

+0

它不起作用。我們得到 但是,我們希望真的是什麼 alexbf 2010-05-25 17:44:31

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樹。解析輸入和序列化輸出在它的領域之外。 ]