(가)

2010-05-11 5 views
1

XML 사람이 그런 일 리눅스에서 하나의 XML로 두 개의 XML을 결합하여 얻을 수있는 방법이 있나요 :(가)

<dict> 
    <key>A</key> 
    <array> 
     <string>A1</string> 
     <false/> 
     <false/> 
     <array> 
      <string>Apple</string> 
      <string>This is an apple</string> 
     </array> 
     <array> 
      <string>Apple Pie</string> 
      <string>I love Apple Pie.</string> 
     </array> 
    </array> 
    <key>B</key> 
    <array> 
     <string>B7</string> 
     <false/> 
     <false/> 
     <array> 
      <string>Boy</string> 
      <string>I am a boy.</string> 
     </array> 
    </array> 
</dict> 

I 변환 할 :

<dict> 
    <key>2</key> 
    <array> 
     <string>A</string> 
     <string>B</string> 
    </array> 
    <key>3</key> 
    <array> 
     <string>C</string> 
     <string>D</string> 
     <string>E</string> 
    </array> 
</dict>  

XML 두 그런 뭔가 여기에 :

<dict> 
    <key>2</key> 
    <array> 
     <string>A, Apple, Apple Pie</string> 
     <string>B, Boy</string> 
    </array> 
    ... 
</dict> 
+2

XSLT이 충분히 쉽게 할 수 있습니다. –

+0

이그나시오가 옳습니다. 그리고 이것은 stackoverflow 질문입니다. –

답변

0

자바를 설치하고 XmlMerge를 사용합니다.

XML Merger도 유용 할 수 있습니다.

1

두 번째 XML 파일을 첫 번째 XML 파일에 다음과 같은 스타일 시트를 적용 가정하여 XSLT를 사용하여 할 수는 two.xml 이름 :

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:key name="string-by-key" 
      match="/dict/array/array/string[1]" 
      use="preceding::key[1]"/> 
    <xsl:template match="dict"> 
    <dict> 
     <xsl:apply-templates select="key"/> 
    </dict> 
    </xsl:template> 
    <xsl:template match="key"> 
    <key> 
     <xsl:value-of select="."/> 
    </key> 
    <array> 
     <xsl:apply-templates select="following-sibling::array[1]/string"/> 
    </array> 
    </xsl:template> 
    <xsl:template match="string"> 
    <string> 
     <xsl:variable name="key" select="."/> 
     <xsl:value-of select="$key"/> 
     <xsl:for-each select="document('two.xml')"> 
     <xsl:for-each select="key('string-by-key', $key)"> 
      <xsl:text>, </xsl:text> 
      <xsl:value-of select="."/> 
     </xsl:for-each> 
     </xsl:for-each> 
    </string> 
    </xsl:template> 
</xsl:stylesheet> 

의 핵심 트릭을 여기 (웃기려는 의도 없음)입니다

  1. 인덱스 xsl:key의 사용은 자신의 키에 의해 문자열은 쉽게 빠른 조회 및
  2. 이변경 수 있도록컨텍스트 노드를 을 사용하여 xsl:for-each을 사용하여 key 함수를 호출하기 전에 호출하십시오.

편집. 당신이 리눅스에 대해 구체적으로 질문 때문에, 당신은이처럼 입력 파일에 XSLT 스타일 시트를 적용 할 xsltproc 프로그램을 사용할 수 있습니다 :

xsltproc stylesheet.xsl one.xml