2013-05-28 4 views
0

안녕하세요.이 문제에 대한 솔루션을 찾는 데 문제가 있습니다. 지금 나는 이처럼 보이는 xml이있다.단일 특성에 다중 노드 값

<text> 
    <token>string1</token> 
    <token>string2</token> 
</text> 

는 그리고이 형식으로 변환해야합니다. 여러 노드에서 값을 가져 와서 단일 속성으로 이동하는 방법을 모르겠습니다. 위의 xml이 주어진다면 원하는 출력이 될 것입니다.

<text text="string1 string2"></text> 

답변

1

라비 Thapliyal에서 문은 권리입니다. xsl:elementxsl:attribute을 사용할 수 있습니다. 그러나 "솔루션"(xslt-1.0 포함)은 다음과 같이 더 잘 고정되어야합니다.

<?xml version="1.0" encoding="utf-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:element name="text"> 
      <xsl:attribute name="text" > 
       <xsl:for-each select="text/token" > 
        <xsl:if test="position() > 1 " > 
         <xsl:text> </xsl:text> 
        </xsl:if> 
        <xsl:value-of select="."/> 
       </xsl:for-each> 
      </xsl:attribute> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

업데이트 : 솔루션 XSL로 사용 : 적용 템플릿.

<xsl:template match="token" > 
    <xsl:if test="position() > 1 " > 
     <xsl:text> </xsl:text> 
    </xsl:if> 
    <xsl:value-of select="."/> 
</xsl:template> 

<xsl:template match="/"> 
    <text> 
     <xsl:attribute name="text" > 
      <xsl:apply-templates select="text/token" /> 
     </xsl:attribute> 
    </text> 
</xsl:template> 
+0

이것은 작동합니다. 나는 처음에 혼란 스러웠다. 어디에/어떻게/어떻게 사용해야만 했는가? –

+0

대부분의 경우에 for-each를 사용하는 것이 가장 좋은 방법은 아닙니다. 'xsl : apply-templates'를 사용하는 대부분의 시간이 더 좋을 것입니다. –

+0

OP를 대신해서 +1. –

0

는 XSLT에 <xsl:element><xsl:attribute> 태그를 사용합니다.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <xsl:element name="text"> 
     <xsl:attribute name="text" select="text/token" /> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

출력

<?xml version="1.0" encoding="UTF-8"?> 
<text text="string1 string2" /> 
+0

답장을 보내 주셔서 감사합니다, 나는이 작품 믿지 않지만. xsl : attribute 태그에는 select 속성이 없습니다. 어딘가에 for-each를 사용해야합니다. –

+0

그것이 작동하지 않는다는 결론에 도달하기 전에 이것을 시도 했습니까? 재미있는 단어'Output'을 거기에 넣었습니까? –

+0

@RaviThapliyal 또한 이것이 xslt-1.0 프로세서에서 작동하지 않을 것이라고 생각합니다. (xlstproc과는 다릅니다!) xslt-2.0을 사용합니까? 하지만 xsl : stylesheet는 1.0입니다. –

관련 문제