2010-07-01 2 views
2

와 요소의 텍스트 바꾸기 그래서 단순히 따옴표로 묶어야 동일한 텍스트와 하위 요소의 텍스트 값의 텍스트를 대체 할 XSLT를 좋아하는 것 : 나는 아이 요소별로 논리를 할 수XSLT 따옴표로 묶인 같은 텍스트 노드의 텍스트를 대체하는 것이 무엇인가 XSLT 포함 된 텍스트 값

<users> 
    <user_info> 
    <lastname>"Jenkins"</lastname> 
    <firstname>"Bob"</firstname> 
    </user_info> 
    <user_info> 
    <lastname>"Smith"</lastname> 
    <firstname>"Mike"</firstname> 
    </user_info> 
</users> 

하지만입니다 지루한. user_info 노드 목록 수준에서 반복을 수행하는 방법에 대해 혼란스러워합니다. 늘 그렇듯이 대답은 아마도 매우 간단합니다. 도움에 감사드립니다.

+0

좋은 질문 (+1) :는 원하는 결과을 생산하고 있습니다. 최신 요구 사항을 충족시키는 솔루션에 대한 내 대답을보십시오. :) –

답변

3

이 변환이 XML 문서에 적용

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

<xsl:variable name="vQ">"</xsl:variable> 

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

<xsl:template match="user_info/*/text()"> 
    <xsl:value-of select="concat($vQ, ., $vQ)"/> 
</xsl:template> 

<xsl:template match="user_info/*[not(node())]"> 
    <xsl:copy> 
    <xsl:copy-of select="@*"/> 
    <xsl:value-of select="concat($vQ, $vQ)"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

:

<users> 
    <user_info> 
    <lastname>Jenkins</lastname> 
    <firstname>Bob</firstname> 
    <address2></address2> 
    </user_info> 
    <user_info> 
    <lastname>Smith</lastname> 
    <firstname>Mike</firstname> 
    </user_info> 
</users> 
<users> 
    <user_info> 
    <lastname>"Jenkins"</lastname> 
    <firstname>"Bob"</firstname> 
    <address2>""</address2> 
    </user_info> 
    <user_info> 
    <lastname>"Smith"</lastname> 
    <firstname>"Mike"</firstname> 
    </user_info> 
</users> 
-1

은 내가 user_info//text() 선택의 100 % 확실하지 않다,하지만 난이 일 것이라고 생각 :

<xsl:template match="user_info//text()"> 
    <xsl:text>"</xsl:text> 
    <xsl:value-of select="."/> 
    <xsl:text>"</xsl:text> 
</xsl:template> 

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

AJPerez, 고마워. 텍스트가있는 모든 값을 큰 따옴표로 묶었습니다. 빈 문자열에 대해서는 큰 따옴표가 필요합니다. " 대신 대신"? "을 추가 할 수 있습니까? – Walinmichi