2012-08-27 4 views
1

XML의 모든 요소에 대한 키 값 쌍을 작성하려고합니다. 예 :XML 출력을 템플리트의 입력으로 사용하십시오.

<a> 
    <b>1</b> 
    <c>2</c> 
</a> 

반환 윌 :

<KEY_VALUE_PAIR> 
    <KEY>a/b</KEY> 
    <VALUE>1</VALUE> 
</KEY_VALUE_PAIR> 
<KEY_VALUE_PAIR> 
    <KEY>a/c</KEY> 
    <VALUE>2</VALUE> 
</KEY_VALUE_PAIR> 

하지만, 내 문제는 내가 문자열로 입력 XML을하고 싶은 것입니다.

그래서, 입력으로이 가진 대신 :

<a> 
    <b>1</b> 
    <c>2</c> 
</a> 

나는 이것을 사용하고 싶습니다 :

<XML> 
    <content>&lt;a&gt;&lt;b&gt;xyz&lt;/a&gt;&lt;/b&gt;</content> 
</XML> 

를이 내 코드입니다 : 그것은 거의 작동 키 값의 생성 쌍은 괜찮지 만, XML/컨텐츠로 XML을 가져 오는 대신 입력 XML의 키 값 쌍을 작성합니다.

<xsl:output method="xml" indent="yes"/> 

<xsl:template match="/XML/content"> 
    <xsl:value-of select="/XML/content" disable-output-escaping="yes"/> 
    <xsl:call-template name="CreateNotificationValues"/> 
    <xsl:call-template name="CreateNotificationClear"/> 
</xsl:template> 

<xsl:template match="/" name="CreateNotificationValues"> 
    <xsl:for-each select="//*[count(child::*) = 0]"> 
    <KEY_VALUE_PAIR> 
     <KEY> 
     <xsl:for-each select="ancestor::*"><xsl:value-of select="name()"/>/</xsl:for-each> 
     <xsl:value-of select="name()"/> 
     </KEY> 
     <VALUE> 
     <xsl:value-of select="text()"/> 
     </VALUE> 
    </KEY_VALUE_PAIR> 
    </xsl:for-each> 
</xsl:template> 

<xsl:template match="/KEY_VALUE_PAIR" name="CreateNotificationClear"> 
</xsl:template> 

가 어떻게이 사용할 수 : 다른 템플릿의 입력 XML로

<xsl:value-of select="/XML/content" disable-output-escaping="yes"/> 

를?

답변

0

가 어떻게이 사용할 수

: 다른 템플릿의 입력 XML로

<xsl:value-of select="/XML/content" disable-output-escaping="yes"/> 

를?

당신은이 없습니다 - XSLT 변환이 잘 구성된 XML 문서에서 수행하지만, 위의 XSLT 명령의 결과는 단지 텍스트 노드 할 수 있습니다 (최종 표현 처럼 보일 수 있습니다 XML이지만 노드의 트리가 아닙니다.

문자열을 트리 (구문 분석 된 XML 문서)로 사용하려면 다음을 수행하십시오. 구문을 문자열과 이 작업을 수행하는 도구는 xml 파서이라고합니다.

XSLT 1.0 또는 XSLT 2.0 변환은 문자열을 가져 와서 XML 문서 트리으로 구문 분석 할 수 없습니다.

XSLT 3.0에는 정확히 동일한 기능인 parse-xml()이있을 수 있습니다.

XSLT 1.0 또는 XSLT 2.0에서는 선호하는 PL로 작성된 확장 함수을 호출해야합니다.이 함수는 문자열을 XmlDocument 개체로 구문 분석하고이 개체를 다시 변환으로 반환합니다.

관련 문제