2011-01-10 6 views
1

샘플 XML 입력 파일 :XSLT 설정 노드 값

<sample>  
    <vars>  
     <var>  
      <name>connection1</name>  
      <value>tcp</value>  
     </var>  
     <var>  
      <name>connection2</name>  
      <value>ssl</value>  
     </var>  
    </vars>  
</sample> 

다른 질문 보았다면서 내가 사용할 수 있어요 예를 보지 못했다, 대답했다. 위의 XML 파일을 처리하여 이름 노드에 따라 노드 값을 편집하고자합니다.

이름 = 연결 1을 찾아 SSL 동일한 그룹에 값을 설정

출력

<sample>  
    <vars>  
     <var>  
      <name>connection1</name>  
      <value>ssl</value>  
     </var>  
     <var>  
      <name>connection2</name>  
      <value>ssl</value>  
     </var>  
    </vars>  
</sample> 
+0

좋은 질문입니다. +1. 가장 근본적인 XSLT 디자인 패턴 인 아이덴티티 규칙 패턴에 대한 가장 짧은 해결책과 설명은 제 대답을 참조하십시오. –

답변

1

아마도 짧은 해결책이 본 : 원하는 정확한 결과를 제작

<sample> 
    <vars> 
     <var> 
      <name>connection1</name> 
      <value>tcp</value> 
     </var> 
     <var> 
      <name>connection2</name> 
      <value>ssl</value> 
     </var> 
    </vars> 
</sample> 

이 변환이 제공된 XML 문서에인가

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match= 
"var[name='connection1']/value/text()">ssl</xsl:template> 
</xsl:stylesheet> 

:

<sample> 
    <vars> 
     <var> 
     <name>connection1</name> 
     <value>ssl</value> 
     </var> 
     <var> 
     <name>connection2</name> 
     <value>ssl</value> 
     </var> 
    </vars> 
</sample> 

설명 :이 솔루션은 가장 기본적인 XSLT 디자인 패턴 사용

:있는 그대로 모든 노드를 복사 할 identity rule의 사용 만 할 필요가있는 특정 노드와 일치하는 템플릿의 최우선 변경 될 수 있습니다.

+0

우수한, xslt에 초보자의 비트, 이것은 정확히 무슨 메신저 후, –

0
<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="var[name = 'connection1']/value"> 
    <xsl:copy> 
    <xsl:text>ssl</xsl:text> 
    </xsl:copy> 
</xsl:template> 
0

다음 XSLT 사용할 수 있습니다

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="value[preceding-sibling::name = 'connection1']"> 
    <value>ssl</value> 
    </xsl:template> 
</xsl:stylesheet> 
0

사용에 따라 XSL Identity Transform을 특정 케이스를 처리하고 tcp를 ssl로 대체하는 템플릿.