2017-04-26 9 views
0

私はms-accessで復旧したいかなり大きいxmlファイルを持っています。ここでは(当然の最小値で)構造は次のとおりです。MS-ACCESSにXMLファイルを再作成するXSLT

<?xml version="1.0" encoding="UTF-8"?> 
 
<PortfoliosNA> 
 
    <TourOp id="xxx-245-AF"> 
 
    <Company>ITS</Company> 
 
    <joined="11-01-2004" /> 
 
    </TourOp> 
 
    <TourOp id="xxx-342-EU"> 
 
    <Company>TUI</Company> 
 
    <joined="12-03-2004" /> 
 
    </TourOp>   
 
    
 
    <transfer Local="1001 Nuits Travel" HQ="Cairo" RefTO="xxx-245-AF"> 
 
\t <Bus>112</Bus> 
 
\t <AgentsLoc>17</AgentsLoc> 
 
\t <TOleader>4</TOleader> 
 
\t <Circuits>Charm-Hurghada</Circuits> 
 
    </transfer> 
 
    <transfer Local="Alpha Tours" HQ="Bratisla." RefTO="xxx-342-EU"> 
 
\t <Bus>42</Bus> 
 
\t <AgentsLoc>4</AgentsLoc> 
 
\t <TOleader>2</TOleader> 
 
\t <Circuits>xxx</Circuits> 
 
    </transfer> 
 
</PortfoliosNA>

、私はこれには、このXMLを変換しようとしています:あなたはRefTOノードがかかります見ることができるように

<PortfoliosNA> 
    <transfer> 
    <Local>1001 Nuits Travel</Local> 
    <HQ>Cairo</HQ> 
    <RefTO>ITS</RefTO> 
    <Bus>112</Bus> 
    <AgentsLoc>17</AgentsLoc> 
    <TOleader>4</TOleader> 
    <Circuits>Charm-Hurghada</Circuits> 
    </transfer> 
    <transfer> 
    <Local>Alpha Tours</Local> 
    <HQ>Bratisla.</HQ> 
    <RefTO>TUI</RefTO> 
    <Bus>42</Bus> 
    <AgentsLoc>4</AgentsLoc> 
    <TOleader>2</TOleader> 
    <Circuits>xxx</Circuits> 
    </transfer> 
</PortfoliosNA> 

最終的には、7つの列(Local-HQ-1)で「転送」と呼ばれる一意のテーブルをms-accessで取得します。 RefTO-Bus-Agents-TOLeader Circuits)

私は、XSLTファイルを変換することができる読み込み可能なテーブルを持つことができましたが、私はまだ作業テーブルから離れており、IDの代わりに 'RefTO'の値として会社名を取得できませんでした。ここ は私のXSLTファイルです:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
<xsl:output method="xml" indent="yes"/> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

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

</xsl:stylesheet> 

この悪夢から抜け出すと、私の最終報告書を作成するために任意の助けとても感謝しています。ありがとうございました。

答えて

1

このようにそれを試してみてください。

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/PortfoliosNA"> 
    <xsl:copy> 
     <xsl:apply-templates select="transfer"/> 
    </xsl:copy> 
</xsl:template> 

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

<xsl:template match="transfer/@RefTO"> 
    <RefTO> 
     <xsl:value-of select="key('op', .)/Company"/> 
    </RefTO> 
</xsl:template> 

</xsl:stylesheet> 

読んで、この仕組みを理解するには、次のhttps://www.xml.com/pub/a/2002/02/06/key-lookups.html

+0

OMGを魔法のように!今日私の人生を救ってくれてありがとう、ありがとう、ありがとう。私はそのメカニズムをよりよく理解し、次の同様のニーズに直面するためにそこに飛び乗るでしょう。 XMLは本当に私の '幸福'ではありませんが、私はしなければなりません。 – karmel

関連する問題