2

1つのファイルに複数の3つのxmlを結合する方法は?

XMLファイルの場合:01.xml

 <xmlResponse>
        <Person>
            <FirstName>FirstName_1</FirstName>
            <LastName>LastName_1</LastName>
        </Person>
        <Person>
            <FirstName>FirstName_2</FirstName>
            <LastName>LastName_2</LastName>
        </Person>
    </xmlResponse>

XMLファイルの場合:02.xml

<xmlResponse>
    <Person>
        <FirstName>FirstName_2</FirstName>
        <LastName>LastName_2</LastName>
    </Person>
    <Person>
        <FirstName>FirstName_3</FirstName>
        <LastName>LastName_3</LastName>
    </Person>
    <Person>
        <FirstName>FirstName_4</FirstName>
        <LastName>LastName_4</LastName>
    </Person>
</xmlResponse>

XMLファイルの場合:03.xml

<xmlResponse>
    <Person>
        <FirstName>FirstName_5</FirstName>
        <LastName>LastName_5</LastName>
    </Person>
</xmlResponse>

以下のような出力が必要です(01.xml + 02.xml + 03.XML)

<xmlResponse>
    <Person>
        <FirstName>FirstName_1</FirstName>
        <LastName>LastName_1</LastName>
    </Person>
    <Person>
        <FirstName>FirstName_2</FirstName>
        <LastName>LastName_2</LastName>
    </Person>
    <Person>
        <FirstName>FirstName_2</FirstName>
        <LastName>LastName_2</LastName>
    </Person>
    <Person>
        <FirstName>FirstName_3</FirstName>
        <LastName>LastName_3</LastName>
    </Person>
    <Person>
        <FirstName>FirstName_4</FirstName>
        <LastName>LastName_4</LastName>
    </Person>
    <Person>
        <FirstName>FirstName_5</FirstName>
        <LastName>LastName_5</LastName>
    </Person>
</xmlResponse> 

あなたの応答を期待して、tks ...

4

2 に答える 2

0

この XSLT 2.0 スタイルシートを試してみてください ...

<?xml version="1.0"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fn="http://www.w3.org/2005/xpath-functions"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  version="2.0"
  exclude-result-prefixes="xsl xs fn">

<xsl:output indent="yes" encoding="UTF-8" />
<xsl:param name="doc2" /> <!-- File 02.xml -->
<xsl:param name="doc3" /> <!-- File 03.xml -->
<xsl:variable name="doc2-doc" select="document($doc2)" />
<xsl:variable name="doc3-doc" select="document($doc3)" />

<xsl:template  match="/">
 <xmlResponse>
    <xsl:apply-templates />
    <xsl:apply-templates select="$doc2-doc/*" />
    <xsl:apply-templates select="$doc3-doc/*" />
 </xmlResponse>
</xsl:template>

<!-- Identity transform follows. -->
<xsl:template match="element()">
  <xsl:copy>
    <xsl:apply-templates select="@*,node()"/>
   </xsl:copy>
</xsl:template>
<xsl:template match="attribute()|text()|comment()|processing-instruction()">
  <xsl:copy/>
</xsl:template>

</xsl:stylesheet>

変換では、入力ドキュメントが最初のドキュメント (ファイル 01.xml) になり、他の 2 つは変換パラメーターとして渡されます。

XSLT 1.0 に制限されている場合は、いくつかの変更が必要になりますが、それほど難しくはありません。

于 2012-04-30T16:03:17.730 に答える
0

XSLT を使用することもできますが、ASP Classic (または実際にはその他のもの) でこのタスクを実行するにはやり過ぎです。

(質問のタグ付けを間違えていないと仮定して)

Function GetDom(pathToFile)
    Set GetDom = CreateObject("MSXML2.DOMDocument.3.0")
    GetDom.async = False
    GetDom.setProperty "SelectionLanguage", "XPath"
    GetDom.load pathToFile
End Function

Sub CopyElements(xmlPrimeRoot, xmlDonor)
    Dim elem
    For Each elem In xmlDonor.documentElement.selectNodes("*")
        xmlPrimeRoot.appendChild elem 
    Next  
End Sub

Dim xmlPrime: Set xmlPrime = GetDom(pathToFile1)

CopyElements xmlPrime.documentElement, GetDom(pathToFile2)
CopyElements xmlPrime.documentElement, GetDom(pathToFile3)

xmlPrime.save pathToDestinationFile

ターゲット出力が ASP 応答の場合、最後の行は次のようになります。

xmlPrime.save Response
于 2012-05-01T10:11:10.070 に答える