2017-09-19 15 views
0

XMLファイルをAccessデータベースにインポートする必要があります。XMLファイルをAccessにインポートする

私はApplication.ImportXMLを試しましたが、ファイルの構造が間違っています。 インポートした後、私は3つのテーブルを持っているが、メインテーブルFormattedReportObjectは、以下の構造を有する:

"のObjectName" "FormattedValue" "バリュー"

私は構造を持つテーブルを作成する必要があります。

"Tytul" "z1Lpf1" "z1Iloscf1" "z1KodKreskowyf1" "z1SymbolTowaruf1" このstrのため

値形式はFormattedValue列にあります。

Link to my website

答えて

1

XSLT、XMLファイルを変換するために設計された専用の言語を使用することを検討してください。元のXMLは必要な構造でインポートされないため、元のXMLを変換して必要なデータを抽出する必要があります。

具体的には、ObjectNameテキストを新しいXML要素として渡す必要があります。これにより、Accessテーブルの列として移行されます。また、XSLTは、空の列と行がなくても完全な完全なデータを維持するXMLの詳細セクションのみにフィルタリングします。

XSLTスクリプト(としての.xslファイル、VBAでロードするために特別な完全に有効な.xmlファイルを保存)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
           xmlns:doc="urn:crystal-reports:schemas" 
           exclude-result-prefixes="doc"> 
    <xsl:output indent="yes" encoding="utf-8"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="/doc:FormattedReport"> 
    <xsl:copy> 
     <xsl:apply-templates select="descendant::doc:FormattedReportObjects[doc:FormattedReportObject/doc:ObjectName='z1Lpf1']"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="doc:FormattedReportObjects"> 
    <xsl:element name="data" namespace="urn:crystal-reports:schemas">  
     <xsl:apply-templates select="doc:FormattedReportObject"/>  
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="doc:FormattedReportObject"> 
    <xsl:element name="{doc:ObjectName}" namespace="urn:crystal-reports:schemas"> 
     <xsl:value-of select="normalize-space(doc:Value|doc:TextValue)"/> 
    </xsl:element>  
    </xsl:template> 

</xsl:stylesheet> 

VBA

Public Sub XMLImportData() 
    ' ADD MSXML, v6.0 REFERENCE UNDER TOOLS 
    Dim xmlDoc As New MSXML2.DOMDocument60 
    Dim xslDoc As New MSXML2.DOMDocument60 
    Dim newDoc As New MSXML2.DOMDocument60 

    ' LOAD XML AND XSL FILES 
    xmlDoc.async = False 
    xmlDoc.Load "http://kumcio.cba.pl/546kopia.xml" 

    xslDoc.async = False 
    xslDoc.Load "C:\Path\To\XSLT_Script.xsl" 

    ' TRANSFORM XML 
    xmlDoc.transformNodeToObject xslDoc, newDoc 
    newDoc.Save "C:\Path\To\OutputXML.xml" 

    Application.ImportXML "C:\Path\To\OutputXML.xml" 

    Set xmlDoc = Nothing: Set xslDoc = Nothing: Set newDoc = Nothing 
End Sub 

出力

<?xml version="1.0" encoding="utf-8"?> 
<FormattedReport xmlns="urn:crystal-reports:schemas" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> 
    <data> 
     <z1Lpf1>1.00</z1Lpf1> 
     <z1NazwaLubOpisf1>1.17003Świetlik 4,5 x 39 ziel</z1NazwaLubOpisf1> 
     <z1Iloscf1>100.00</z1Iloscf1> 
     <z1Jmf1>szt.</z1Jmf1> 
     <z1KodKreskowyf1>5902767311281</z1KodKreskowyf1> 
     <z1Wlasne1f1>382378</z1Wlasne1f1> 
     <z1Wlasne2f1>50</z1Wlasne2f1> 
     <z1SymbolTowaruf1>1.17003</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>2.00</z1Lpf1> 
     <z1NazwaLubOpisf1>1.17004Świetlik 4,5 x 39 czer</z1NazwaLubOpisf1> 
     <z1Iloscf1>100.00</z1Iloscf1> 
     <z1Jmf1>szt.</z1Jmf1> 
     <z1KodKreskowyf1>5902767311298</z1KodKreskowyf1> 
     <z1Wlasne1f1>382381</z1Wlasne1f1> 
     <z1Wlasne2f1>50</z1Wlasne2f1> 
     <z1SymbolTowaruf1>1.17004</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>3.00</z1Lpf1> 
     <z1NazwaLubOpisf1>1.17005Świetlik 4,5 x 39 nieb</z1NazwaLubOpisf1> 
     <z1Iloscf1>100.00</z1Iloscf1> 
     <z1Jmf1>szt.</z1Jmf1> 
     <z1KodKreskowyf1>5902767311304</z1KodKreskowyf1> 
     <z1Wlasne1f1>382386</z1Wlasne1f1> 
     <z1Wlasne2f1>50</z1Wlasne2f1> 
     <z1SymbolTowaruf1>1.17005</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>4.00</z1Lpf1> 
     <z1NazwaLubOpisf1>3.01015Gł.jig 7g hacz 3/0</z1NazwaLubOpisf1> 
     <z1Iloscf1>5.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767315227</z1KodKreskowyf1> 
     <z1Wlasne1f1>382189</z1Wlasne1f1> 
     <z1Wlasne2f1>5</z1Wlasne2f1> 
     <z1SymbolTowaruf1>3.01015</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>5.00</z1Lpf1> 
     <z1NazwaLubOpisf1>3.01013Gł.jig 7g hacz 1/0</z1NazwaLubOpisf1> 
     <z1Iloscf1>5.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767315203</z1KodKreskowyf1> 
     <z1Wlasne1f1>382177</z1Wlasne1f1> 
     <z1Wlasne2f1>5</z1Wlasne2f1> 
     <z1SymbolTowaruf1>3.01013</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>6.00</z1Lpf1> 
     <z1NazwaLubOpisf1>3.02017Głowka jigowa micro7g</z1NazwaLubOpisf1> 
     <z1Iloscf1>5.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767311786</z1KodKreskowyf1> 
     <z1Wlasne1f1>382686</z1Wlasne1f1> 
     <z1Wlasne2f1>5</z1Wlasne2f1> 
     <z1SymbolTowaruf1>3.02017</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>7.00</z1Lpf1> 
     <z1NazwaLubOpisf1>1.12054kotwiczka 4 gunsmoke</z1NazwaLubOpisf1> 
     <z1Iloscf1>10.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767310581</z1KodKreskowyf1> 
     <z1Wlasne1f1>382863</z1Wlasne1f1> 
     <z1Wlasne2f1>10</z1Wlasne2f1> 
     <z1SymbolTowaruf1>1.12054</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>8.00</z1Lpf1> 
     <z1NazwaLubOpisf1>1.12055kotwiczka 2 gunsmoke</z1NazwaLubOpisf1> 
     <z1Iloscf1>10.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767310598</z1KodKreskowyf1> 
     <z1Wlasne1f1>382867</z1Wlasne1f1> 
     <z1Wlasne2f1>10</z1Wlasne2f1> 
     <z1SymbolTowaruf1>1.12055</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>9.00</z1Lpf1> 
     <z1NazwaLubOpisf1>3.01014Gł.jig 7g hacz 2/0</z1NazwaLubOpisf1> 
     <z1Iloscf1>5.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767315210</z1KodKreskowyf1> 
     <z1Wlasne1f1>382182</z1Wlasne1f1> 
     <z1Wlasne2f1>5</z1Wlasne2f1> 
     <z1SymbolTowaruf1>3.01014</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>10.00</z1Lpf1> 
     <z1NazwaLubOpisf1>3.01016Gł.jig 7g hacz 4/0</z1NazwaLubOpisf1> 
     <z1Iloscf1>5.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767315234</z1KodKreskowyf1> 
     <z1Wlasne1f1>382202</z1Wlasne1f1> 
     <z1Wlasne2f1>5</z1Wlasne2f1> 
     <z1SymbolTowaruf1>3.01016</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>11.00</z1Lpf1> 
     <z1NazwaLubOpisf1>3.01017Gł.jig 7g hacz 5/0</z1NazwaLubOpisf1> 
     <z1Iloscf1>5.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767315241</z1KodKreskowyf1> 
     <z1Wlasne1f1>382210</z1Wlasne1f1> 
     <z1Wlasne2f1>5</z1Wlasne2f1> 
     <z1SymbolTowaruf1>3.01017</z1SymbolTowaruf1> 
    </data> 
    <data> 
     <z1Lpf1>12.00</z1Lpf1> 
     <z1NazwaLubOpisf1>3.04005Gł jig żół blaszka 6g</z1NazwaLubOpisf1> 
     <z1Iloscf1>5.00</z1Iloscf1> 
     <z1Jmf1>opak.</z1Jmf1> 
     <z1KodKreskowyf1>5902767311847</z1KodKreskowyf1> 
     <z1Wlasne1f1>382695</z1Wlasne1f1> 
     <z1Wlasne2f1>5</z1Wlasne2f1> 
     <z1SymbolTowaruf1>3.04005</z1SymbolTowaruf1> 
    </data> 
</FormattedReport> 

Imported Access Table

+0

私はこれを試しますが、エラーがあります。 実行時エラー '31593': OutputXML.xmlファイルでXMLスキーマを処理中にMS Accessでエラーが発生しました 文書には正確に1つのルート要素が含まれている必要があります – kumcio

+0

実際にはルートに宣言されていない名前空間接頭辞があります。クリスタルレポート:スキーマ '。つまり、* Output.xml *は空白です。私はこれを説明するためにXSLTを調整しました。ちなみに、URLから直接XMLを読み込むことができます。投稿されたリンクを使用して更新されたVBAを参照してください – Parfait

+0

それは仕事です! 私はXSLTを試しましたが、私はこのエラーがあり、私は今なぜですか:)。 大きなご協力ありがとうございます! – kumcio

関連する問題