我需要将XML文件导入Access数据库。
我尝试Application.ImportXML
,但文件结构错误。
导入后我有3个表,但主表格FormattedReportObject具有结构:
“ObjectName”“FormattedValue”“Value”
我需要创建一个结构表:
“Tytul”“z1Lpf1”“z1Iloscf1”“z1KodKreskowyf1”“z1SymbolTowaruf1”
此结构的值位于FormattedValue列中。
答案 0 :(得分: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>