2013-02-13 2 views
0

이 xslt를 작성하는 올바른 방법입니까?XML을 XML로 변환하여 예상 결과를 제공하지 않는 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> 

: 우선 변환 할 XML 조각이고, 두 번째는 내가 쓰고있어 XSLT 마지막 결과입니다 예상대로 작동하지 않으며 내가 뭘 잘못하고 있는지 잘 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

"예상대로 작동하지 않습니다."라고 말하면 더 구체적으로 표현할 수 있습니까? 예상대로 정확히 무엇입니까? 출력 XML의 빈 테이블, 행 및 레이블 속성입니까? –

+0

예, Insets = "30,0,0,0"을 기대하고있었습니다. RelativeLocation = "0,0"테이블 속성 등 –

답변

0

스타일 시트에 몇 가지 문제가 있습니다. 예를 들어 TableNodeStyle 출력 요소를 살펴보면 <xsl:value-of>의 컨텍스트 노드가 문서의 루트입니다.

다음
<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/> 적용 할 수있다 :

당신은 입력 문서의 <ysl:TableNodeStyle> 요소를 일치하는 스타일 시트 내에서 새 템플릿을 만들 수 있습니다
<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/>별로 호출 할 수 있습니다.

원래 스타일 시트를 보면 웹에서 간단한 예제를 찾아서이 문제를 다시 해결하기 전에 매우 유용 할 것이라고 생각합니다. 여기에서하려고하는 것에 대해 더 많이 배울 수있을만큼 충분해야합니다.

업데이트 : 좋아요, 제가 유용한 스타일 시트를 만들었습니다. 당신이하려고하는 것, 그리고 당신을위한 좋은 출발점이 될지 모르지만, 실제로 찾아내는 것이 좋습니다. 어떻게 복사하고 기대하는 것보다 효과가 있습니까?

<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> 
+0

감사합니다. Matt. 귀하의 의견에 감사드립니다. 내 코드를 더 살펴볼 것이다. –

+0

@LeeWarren - 앞으로 더 많은 것을 제공 할 수있는 완벽한 스타일 시트를 추가했습니다. 행운을 빌어 요! –

+0

다시 맷. 코드를 복사하고 XML에 대해 실행했지만 결과는 다음과 같습니다. 그리고 다른 것은 반환하지 않습니다. –

관련 문제