2017-03-20 10 views
0

xslt를 처음 사용하기 때문에 xml에서 xml로 변환하려고합니다. 아래 문제에 대한 xslt 솔루션을 제공해주십시오. 입력 XML은 아래와 같다 : 메타xslt는 하위 노드에 고유 키를 연결합니다.

<root type="object"> 
    <items type="array"> 
     <item type="object"> 
      <embed_code type="string">abcdef</embed_code> 
      <description type="string">some description text</description> 
      <created_at type="string">2017-02-20T20:52:52Z</created_at> 
      <metadata type="object"> 
       <guest type="string">Gary</guest> 
       <webinfo type="string">www.webinfotest.com</webInfo> 
       <title type="string">Practical Advice</title> 
       <airdate type="string">2017-02-21</airDate> 
      </metadata> 
      <status type="string">live</status> 
      <asset_type type="string">video</asset_type> 
      <player_id type="string">391e099a718f4a62b44c78f97f85ecde</player_id> 
      <name type="string">title</name> 
     </item> 
     <item type="object"> 
      <embed_code type="string">vwxyz</embed_code> 
      <description type="string">some description text test</description> 
      <created_at type="string">2015-02-20T20:52:52Z</created_at> 
      <metadata type="object"> 
       <scripture>Roman</scripture> 
       <theme>Obeying those in authority</theme> 
      </metadata> 
      <status type="string">live</status> 
      <asset_type type="string">video</asset_type> 
      <player_id type="string">391e099a718f4a62b44c78f97f85ecdea</player_id> 
      <name type="string">title1</name>   
     </item> 
    </items> 
</root> 

자식 노드 요소의 요소 이름 및 번호를 메타 데이터의 각각의 자식 노드가 다른 것 동적이다. embed_code는 고유 한 값을 갖는 요소입니다. 항목 1의 자식으로 세 가지 요소가 있어야합니다. embed_code, 2.metadata_name, 3.metadata_value. metadata_name 요소는 메타 데이터 하위 요소의 요소 이름을 갖습니다. metadata_value 요소는 메타 데이터 하위 요소의 값을 갖습니다.

출력 XML은 다음과 같이 할 필요가 :

<metadata> 
    <item> 
     <embed_code>abcdef</embed_code> 
     <metadata_name>guest</metadata_name> 
     <metadata_value>Gary</metadata_value> 
    </item> 
    <item> 
     <embed_code>abcdef</embed_code> 
     <metadata_name>webinfo</metadata_name> 
     <metadata_value>www.webinfotest.com</metadata_value> 
    </item> 
    <item> 
     <embed_code>abcdef</embed_code> 
     <metadata_name>title</metadata_name> 
     <metadata_value>Practical Advice</metadata_value> 
    </item> 
    <item> 
     <embed_code>abcdef</embed_code> 
     <metadata_name>airdate</metadata_name> 
     <metadata_value>2017-02-21</metadata_value> 
    </item> 
    <item> 
     <embed_code>vwxyz</embed_code> 
     <metadata_name>scripture</metadata_name> 
     <metadata_value>Roman</metadata_value> 
    </item> 
    <item> 
     <embed_code>vwxyz</embed_code> 
     <metadata_name>theme</metadata_name> 
     <metadata_value>Obeying those in authority</metadata_value> 
    </item> 
</metadata> 
+0

을 시도 기본적으로입니까? –

답변

0

<xsl:template match="metadata/*"> 
<item> 
    <xsl:copy-of select="../../embed_code"/> 
    <metadata_name><xsl:value-of select="name()"/></metadata_name> 
    <metadata_value><xsl:value-of select="."/></metadata_value> 
</item> 
</xsl:template> 
0

당신이 지금까지 가지고있는 XSLT를 추가하시기 바랍니다 수있는 다음과 같은 솔루션

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" omit-xml-declaration="yes" 
    encoding="UTF-8" indent="yes" /> 

    <xsl:template match="/"> 
    <metadata> 
     <xsl:for-each select="root/items/item"> 
     <xsl:variable name="eCode" select="embed_code"/> 
     <xsl:for-each select="metadata/*"> 
      <item> 
      <embed_code> 
       <xsl:value-of select="$eCode"/> 
      </embed_code> 
      <xsl:element name="metadata_name"> 
       <xsl:value-of select="name()"/> 
      </xsl:element> 
      <xsl:element name="metadata_value"> 
       <xsl:value-of select="."/> 
      </xsl:element> 
      </item> 
     </xsl:for-each> 
     </xsl:for-each> 
    </metadata> 
    </xsl:template> 
</xsl:transform>