2013-06-18 3 views
1

다음은 변환해야 할 원본 XML 파일입니다. 출력으로 트리거마다 위젯 당 사용 가능한 애니메이션 효과를 표시해야합니다. 위젯 유형 전체 및 트리거 유형처럼 1, 3,6,9.XML을 HTML로 변환

<?xml version="1.0" encoding="utf-8"?> 
<InputAnimationConfigurationSchema> 
<ConfigurationEffects> 
<AEffect Id="1" DisplayName="A Effect"> 
</AEffect> 
<BEffect Id="2" DisplayName="B Effect"> 
</BEffect> 
<CEffect Id="3" DisplayName="C Effect"> 
</CEffect> 
<DEffect Id="4" DisplayName="D effect"> 
</DEffect> 
<EEffect Id="5" DisplayName="E effect"> 
</EEffect> 
<FEffect Id="6" DisplayName="F effect"> 
</FEffect> 
<GEffect Id="7" DisplayName="G effect"> 
</GEffect> 
<HEffect Id="8" DisplayName="H effect"> 
</HEffect> 
<IEffect Id="9" DisplayName="I effect"> 
</IEffect> 
<JEffect Id="10" DisplayName="J effect"> 
</JEffect> 
<KEffect Id="11" DisplayName="K effect"> 
</HEffect> 
<LEffect Id="12" DisplayName="L effect"> 
</KEffect> 
</ConfigurationEffects> 
<ConfigurationMappings> 
<ConfigurationMap> 
<Widget Type="All" Include="true" NeedsMandatoryEffectConfiguration="true"/> 
<Trigger Type="Show" /> 
<ConfigurationEffects> 
<Effect>1</Effect> 
<Effect>2</Effect> 
<Effect>3</Effect> 
<Effect>9</Effect> 
</ConfigurationEffects> 
</ConfigurationMap> 
<ConfigurationMap> 
<Widget Type="All" Include="true" NeedsMandatoryEffectConfiguration="true"/> 
<Trigger Type="Hide" /> 
<ConfigurationEffects> 
<Effect>1</Effect> 
<Effect>2</Effect> 
<Effect>3</Effect> 
<Effect>9</Effect> 
</ConfigurationEffects> 
</ConfigurationMap> 
<ConfigurationMap> 
    <Widget Type="PlaceHolder" Include="false" NeedsMandatoryEffectConfiguration="true"/> 
</ConfigurationMap> 
<ConfigurationMap> 
    <Widget Type="PosterItem" Include="false" NeedsMandatoryEffectConfiguration="true"/> 
</ConfigurationMap> 
</ConfigurationMappings> 
</InputAnimationConfigurationSchema> 
나는 아래 형식으로 출력 얻고 있었다

:

All  Show  A Effect 
-------------------------- 
All  Show  C Effect 
-------------------------- 
All  Show  F Effect 
------------------------- 
All  Show  I Effect 
---------------------------- 
All  Hide  A Effect 
--------------------------- 
All  Hide  C Effect 
-------------------------- 
All  Hide  F Effect 
---------------------------- 

하지만 아래의 형식으로 출력을 표시하려면 :

All  Show  A Effect 
-------------------------- 
All  Show  C Effect 
-------------------------- 
All  Show  F Effect 
------------------------- 
All  Show  I Effect 
---------------------------- 
All  Hide  A Effect 
--------------------------- 
All  Hide  C Effect 
-------------------------- 
All  Hide  F Effect 
---------------------------- 

자리 표시 자 을 ----- ----------------------- 포스터 항목


위젯에 트리거 및 효과가 포함되어 있지 않으면 빈 값으로 위젯을 표시해야합니다. 사람이 작업

stuartLC에 의해 주어진 XSL 코드를 수행하기위한 좀 포인터를 줄 것이다 경우 감사하겠습니다 것은 내가 일을 시작하지만 자리를 표시하고 그것은 당신을 보인다

+3

그리고 당신은 SO에 다시 질문을 게시하기 전에 시도 무엇? –

+0

나는 이미 쓰기 위해 노력한 xsl 코드를 추가했습니다. 그것은 All, Show, 1.But 대신 All, Show, 1을 시도했습니다. 특정 ID에 대한 effectname을 표시해야합니다. –

+0

XML 형식이 올바르지 않습니다. 2 개의 루트 요소 (ConfigurationEffects 및 ConfigurationMappings가 있으며 KEffect 및 LEffect가 제대로 닫히지 않았습니다.) – StuartLC

답변

1

을 posteritem 여기 주위에 붙어있는 내가 찍은 기지 상단 ConfigurationEffects에서 효과를 찾아야합니다. 이 유형의 작업에는 xsl:key이 만들어집니다. *Effect 요소의 이름이 다르므로 *을 사용하고 @Id에서 일치를 수행했음을 유의하십시오. $effectId 변수를 추가하여 명확하게 나타내지 만 실제로는 필요하지 않습니다. 또한 apply-template

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:key name="effectLookup" match="/InputAnimationConfigurationSchema/ConfigurationEffects/*" use="@Id" /> 
    <xsl:template match="/"> 
     <html> 
     <body> 
      <h2></h2> 
      <table border="1"> 
       <tr bgcolor="#9acd32"> 
        <th>Widget</th> 
        <th>Trigger</th> 
        <th>effects</th> 
       </tr> 
       <xsl:for-each select="/InputAnimationConfigurationSchema/ConfigurationMappings/ConfigurationMap"> 
        <xsl:variable name="widgetType"> 
        <xsl:value-of select="Widget/@Type"/> 
        </xsl:variable> 
        <xsl:variable name="triggerType"> 
        <xsl:value-of select="Trigger/@Type"/> 
        </xsl:variable> 
        <xsl:for-each select="ConfigurationEffects/Effect"> 
        <xsl:variable name="effectId"> 
         <xsl:value-of select="./text()"/> 
        </xsl:variable> 
        <tr> 
         <td> 
          <xsl:value-of select="$widgetType"/> 
         </td> 
         <td> 
          <xsl:value-of select="$triggerType"/> 
         </td> 
         <td> 
          <xsl:value-of select="key('effectLookup', $effectId)/@DisplayName" /> 
         </td> 
        </tr> 
        </xsl:for-each> 

       </xsl:for-each> 
      </table> 
     </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

출력

<html> 
    <body> 
    <h2></h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Widget</th> 
     <th>Trigger</th> 
     <th>effects</th> 
     </tr> 
     <tr> 
     <td>All</td> 
     <td>Show</td> 
     <td>A Effect</td> 
     </tr> 
     <tr> 
     <td>All</td> 
     <td>Show</td> 
     <td>B Effect</td> 
     </tr> 
     <tr> 
     <td>All</td> 
     <td>Show</td> 
     <td>C Effect</td> 
     </tr> 
     <tr> 
     <td>All</td> 
     <td>Show</td> 
     <td>I effect</td> 
     </tr> 
     <tr> 
     <td>All</td> 
     <td>Hide</td> 
     <td>A Effect</td> 
     </tr> 
     <tr> 
     <td>All</td> 
     <td>Hide</td> 
     <td>B Effect</td> 
     </tr> 
     <tr> 
     <td>All</td> 
     <td>Hide</td> 
     <td>C Effect</td> 
     </tr> 
     <tr> 
     <td>All</td> 
     <td>Hide</td> 
     <td>I effect</td> 
     </tr> 
    </table> 
    </body> 
</html> 
+0

답변입니다. 좋은. –

+0

도와 주셔서 감사합니다 .... –

0

으로 for-each 루프를 교체를 고려해야합니다

이 한 줄을 변경하여 쉽게 할 수 있습니다.

변경 :

<td><xsl:value-of select="."/></td> 

사람 :

<td> 
    <xsl:value-of select="//ConfigurationEffects/*[@DisplayName][@Id= current()/.]/@DisplayName"/> 
</td> 
+0

도움과지도에 감사드립니다 .... –