0

これはこのxsltを書く正しい方法ですか?最初は変換したいXMLスニペット、2番目は私が書いているxslt、そして最後に結果です。

<ysl:TableNodeStyle TableRenderingOrder="RowsFirst"> 
      <ysl:TableNodeStyle.Table> 
        <y:Table Insets="30,0,0,0" RelativeLocation="0,0"> 
          <y:Table.Rows

> 
                <y:Row MinimumSize="10" Size="185.389513343799" Insets="30,0,0,0" Style="{y:GraphMLReference 2}"> 
                  <y:Row.Labels> 
                    <y:Label LabelModelParameter="{x:Static ysl:StretchStripeLabelModel.West}" Style="{y:GraphMLReference 1}" PreferredSize="72,15"> 
                      <y:Label.Text>Development</y:Label.Text> 
                    </y:Label> 
                  </y:Row.Labels> 
                </y:Row>

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:ysl="http://www.yworks.com/xml/yfiles-for-silverlight/1.0/xaml" 
> 
  <xsl:output method="xml" indent="yes"/> 

  <xsl:template match="/"> 

    <xsl:element name="graphml"> 
      <xsl:element name="graph"> 
        <xsl:element name="TableNodeStyle"> 
          <xsl:attribute name="TableRenderingOrder"><xsl:value-of select="TableRenderingOrder"/></xsl:attribute> 

          <xsl:element name="TableNodeStyle.Table"> 
            <xsl:element name="Table"> 
            <xsl:attribute name="Table"><xsl:value-of select="Table"/></xsl:attribute> 
              <xsl:element name="Table.Rows"> 
                <xsl:element name="Row"> 
                  <xsl:attribute name="Row"><xsl:value-of select="Row"/></xsl:attribute> 
                  <xsl:element name="Label"> 
                    <xsl:attribute name="Label"><xsl:value-of select="Label"/></xsl:attribute> 
                  <!--<y:Row.Labels> 
                    <y:Label LabelModelParameter="{x:Static ysl:StretchStripeLabelModel.West}" Style="{y:GraphMLReference 1}" PreferredSize="72,15"> 
                      <y:Label.Text>Development</y:Label.Text>--> 
                  </xsl:element> 
                </xsl:element> 
              </xsl:element> 
            </xsl:element> 
          </xsl:element> 
        </xsl:element> 
      </xsl:element> 
    </xsl:element> 
  </xsl:template> 
</xsl:stylesheet>

ついに、

    <?xml version="1.0" encoding="utf-8"?> 
<graphml> 
  <graph> 
    <TableNodeStyle TableRenderingOrder=""> 
      <TableNodeStyle.Table> 
        <Table Table=""> 
          <Table.Rows> 
            <Row Row=""> 
              <Label Label="" /> 
            </Row> 
          </Table.Rows> 
        </Table> 
      </TableNodeStyle.Table> 
    </TableNodeStyle> 
  </graph> 
</graphml>

これは明らかに期待どおりに機能しておらず、何が間違っているのかわかりません。助けていただければ幸いです。

4

1 に答える 1

0

スタイルシートにはいくつかの問題があります。たとえば、TableNodeStyle出力要素を見ると、のコンテキストノード<xsl:value-of>はドキュメントのルートです。<ysl:TableNodeStyle>入力ドキュメントの要素と一致するように、スタイルシート内に新しいテンプレートを作成できます。

<xsl:template match="TableNodeStyle">
    <xsl:element name="TableNodeStyle">
        <xsl:attribute name="TableRenderingOrder"><xsl:value-of select="@TableRenderingOrder"/></xsl:attribute>
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

ここに、ソースXMLのTableNodeStyle要素と一致し、次のコマンドで適用できるテンプレートがあります<xsl:apply-templates/>

<xsl:template match="/">
    <xsl:element name="graphml">
        <xsl:element name="graph">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:element>
</xsl:template>

第二に、あなた<xsl:value-of select="TableRenderingOrder"/>はそうあるべきです<xsl:value-of select="@TableRenderingOrder"/>-あなたはあなたがで属性を探していることを指定するために@が必要です"@TableRenderingOrder"

次に、子要素ごとにテンプレートを作成し、それらを具体的に要素ごとまたはによって呼び出すことができます<xsl:call-templates/>

元のスタイルシートを見ると、この問題に戻る前に、Webでいくつかの簡単な例を見つけて、それらを実行することが非常に役立つと思います。ここでやろうとしていることについてもっと学ぶことができるのに十分なはずです。

更新:わかりました、私はあなたにとって有用なスタイルシートを作成しました-それはあなたがやろうとしていると思うことを行い、あなたにとって良い出発点になるかもしれませんが、私はそれがどのように機能するかを知ることを本当にお勧めしますコピーして期待するだけです:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:ysl="http://www.yworks.com/xml/yfiles-for-silverlight/1.0/xaml">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Label">
        <xsl:element name="Label">
            <xsl:attribute name="LabelModelParameter"><xsl:value-of select="@LabelModelParameter"/></xsl:attribute>
            <xsl:attribute name="Style"><xsl:value-of select="@Style"/></xsl:attribute>
            <xsl:attribute name="PreferredSize"><xsl:value-of select="@PreferredSize"/></xsl:attribute>
            <!--<y:Row.Labels> 
                <y:Label LabelModelParameter="{x:Static ysl:StretchStripeLabelModel.West}" Style="{y:GraphMLReference 1}" PreferredSize="72,15"> 
                  <y:Label.Text>Development</y:Label.Text>-->
        </xsl:element>
</xsl:template>
<xsl:template match="Row">
    <xsl:element name="Row">
        <xsl:attribute name="MinimumSize"><xsl:value-of select="@MinimumSize"/></xsl:attribute>
        <xsl:attribute name="Size"><xsl:value-of select="@Size"/></xsl:attribute>
        <xsl:attribute name="Insets"><xsl:value-of select="@Insets"/></xsl:attribute>
        <xsl:attribute name="Style"><xsl:value-of select="@Style"/></xsl:attribute>
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>
<xsl:template match="Table">
    <xsl:element name="Table">
        <xsl:attribute name="Insets"><xsl:value-of select="@Insets"/></xsl:attribute>
        <xsl:attribute name="RelativeLocation"><xsl:value-of select="@RelativeLocation"/></xsl:attribute>
        <xsl:element name="Table.Rows">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:element>
</xsl:template>
<xsl:template match="TableNodeStyle.Table">
    <xsl:element name="TableNodeStyle.Table">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>
<xsl:template match="TableNodeStyle">
    <xsl:element name="TableNodeStyle">
        <xsl:attribute name="TableRenderingOrder"><xsl:value-of select="@TableRenderingOrder"/></xsl:attribute>
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>
<xsl:template match="/">
    <xsl:element name="graphml">
        <xsl:element name="graph">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:element>
</xsl:template>
</xsl:stylesheet>
于 2013-02-13T16:55:25.170 に答える