用xslt创建一个xaml

时间:2011-07-26 09:30:55

标签: xml xaml xslt namespaces

我正在尝试创建xaml Line元素的xsl模板。

这是我到目前为止所做的:

... 

<xsl:call-template name="Line">
  <xsl:with-param name="xOne" select="70"/>
  <xsl:with-param name="xTwo" select="905"/>
  <xsl:with-param name="yOne" select="500"/>
  <xsl:with-param name="yTwo" select="500"/>
</xsl:call-template>

<xsl:template name="Line">
    <xsl:param name="xOne"/>
    <xsl:param name="xTwo"/>
    <xsl:param name="yOne"/>
    <xsl:param name="yTwo"/>
    <Line xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Stroke="red"
      StrokeThickness="2"
      X1="$xOne"
      X2="$xTwo"
      Y1="<xsl:value-of select="number($yOne)"/>" <!-- example: not working -->
      Y2="$yTwo"/>
</xsl:template>

问题:

  • 是否有更好的方法来管理命名空间
  • 参数$ xOne,$ xTwo,...无效。据我所知xslt我应该像这样实现它们:<xsl:value-of select="number($xOne)"/>但由于我尝试实现它们的方式,这是不可能的。

我希望有更多xslt和xaml经验的人可以帮助我吗? :)

我正在使用xsl v1.0

事先提前。

2 个答案:

答案 0 :(得分:2)

  

有没有更好的方法来管理这些命名空间?

您可以将命名空间声明添加到样式表根元素:

<xsl:stylesheet version="1.0" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

然后在必要时使用前缀,例如:

<xsl:template name="Line">
    <!-- ... -->
    <x:Line />
</xsl:template>

其中未使用prefix,将考虑默认命名空间。


  

参数$ xOne,$ xTwo,...无效

了解AVT并使用:

X1="{$xOne}"

答案 1 :(得分:1)

您可以在根节点中放置名称空间声明,即:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>

那么你可以简单地编写,而无需添加名称空间:

<Line

使用{}设置属性值,例如:

<xsl:template name="Line">
    <xsl:param name="xOne"/>
    <xsl:param name="xTwo"/>
    <xsl:param name="yOne"/>
    <xsl:param name="yTwo"/>
    <Line
        Stroke="red"
        StrokeThickness="2"
        X1="{$xOne}"
        X2="{$xTwo}"
        Y1="{$yOne}"
    Y2="{$yTwo}"/>
</xsl:template>