2017-10-03 4 views
1

나는 소스 XML 얼마나 다른 XML 요소에 XML 요소에서 속성 패스 :XSLT : PARAM

<?xml version="1.0" encoding="UTF-8"?> 
<message field1="11" field2="22"> 
    <sub1 sub_field1="sub11" sub_field2="sub22" sub2_id="12243"/> 
    <sub1 sub_field1="sub11" sub_field2="sub12" sub2_id="12244"/>  
    <sub2 sub2_field="sub21" sub2_field2="sub22" id="12243"/> 
    <sub2 sub2_field="sub23" sub2_field2="sub24" id="12243"/> 
    <sub2 sub2_field="sub25" sub2_field2="sub26" id="12244"/> 
    <sub2 sub2_field="sub27" sub2_field2="sub28" id="12244"/> 
</message> 

여기에 구조를, 내가 필요한 :

<message> 
    <sub1> 
     <sub_field1>value</sub_field1> 
     <sub_field2>value</sub_field2> 
     <sub2_list> 
     <sub2> 
      <sub2_field>value</sub2_field> 
      <sub2_field2>value</sub2_field2> 
     </sub2> 
     <sub2> 
      <sub2_field>value</sub2_field> 
      <sub2_field2>value</sub2_field2> 
     </sub2> 
     </sub2_list> 
    </sub1> 
    <sub1> 
     <sub_field1>value</sub_field1> 
     <sub_field2>value</sub_field2> 
     <sub2_list> 
     <sub2> 
      <sub2_field>value</sub2_field> 
      <sub2_field2>value</sub2_field2> 
     </sub2> 
     <sub2> 
      <sub2_field>value</sub2_field> 
      <sub2_field2>value</sub2_field2> 
     </sub2> 
     </sub2_list> 
    </sub1> 
</message> 

을 그리고, 해요 이해 해달라고 sub2_id를 sub1 태그에서 id sub2 태그로 전달하는 방법, sub2_id 사용 방법 param? .............................. .............

내 xsl은 다음과 같습니다.

<?xml version = '1.0' encoding="utf-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="message"> 
       <xsl:variable name="sub2_id=" select="@sub2_id"/> 
       <xsl:element name="sub1"> 
        <xsl:element name="sub_field1"> 
         <xsl:value-of select="@sub_field1"/> 
        </xsl:element> 
        <xsl:element name="sub_field2>"> 
         <xsl:value-of select="@sub_field2>"/> 
        </xsl:element> 
       </xsl:element> 
       <xsl:element name="sub2_list"> 
          <xsl:for-each select="sub2[@id=$sub2_id]"> 
           <xsl:element name="zpu"> 
            <xsl:element name="sub2_field"> 
             <xsl:value-of select="@sub2_field="/> 
            </xsl:element> 
            <xsl:element name="sub2_field2"> 
             <xsl:value-of select="@sub2_field2"/> 
            </xsl:element> 
           </xsl:element> 
          </xsl:for-each> 
       </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

sometextsometextsometextsometextsometextsometextsometextsometextsometext

답변

0

당신은 sub2_id=가 유효한 변수 이름 아마도

<xsl:variable name="sub2_id=" select="@sub2_id"/> 

이 작업을 수행하는 것은 아닙니다 예를 들어, 코드의 일부 구문 오류가 있습니까 ...

<xsl:variable name="sub2_id" select="@sub2_id"/> 

아마 일부 코드를 놓친 것일 수도 있지만, 그 varia 예를 들어 message 요소에 배치 된 경우 sub1 요소에 있어야하므로 코드에 xsl:for-each 또는 xsl:apply-templates이 있어야 sub1을 선택할 수 있습니다. 당신이 그 케이스 sub2sub1의 형제 그래서 당신이 할 것을 선택하는 것입니다하는 sub1 요소에 배치 된 가정

... 그러나

<xsl:for-each select="../sub2[@id=$sub2_id]"> 

, 그것은에 도움이 될 수 있습니다 여기서 xsl:key을 사용하여 sub2 요소를 찾으십시오.

이 XSLT에게 내가 크게 코드를 단순화 요소에 속성을 변환하는 일반적인 템플릿을 추가 한

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

<xsl:key name="sub2" match="sub2" use="@id" /> 

<xsl:template match="message"> 
    <xsl:copy> 
     <xsl:apply-templates select="sub1" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="sub1"> 
    <sub1> 
     <xsl:apply-templates select="@sub_field1|@sub_field2"/> 
     <sub2list> 
      <xsl:for-each select="key('sub2', @sub2_id)"> 
       <sub2> 
        <xsl:apply-templates select="@sub2_field|@sub2_field2"/> 
       </sub2> 
      </xsl:for-each> 
     </sub2list> 
    </sub1> 
</xsl:template> 

<xsl:template match="@*"> 
    <xsl:element name="{name()}"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

참고하십시오.

+0

감사합니다. 이 템플릿은 나중에 사용하겠습니다. – ExcepOra