2016-05-15 87 views
1

我有超過1000的XML文件,都具有不同的數據,但同樣的標籤提取從多個XML文件中的某些數據導入Excel

<Title> 
    <LocalTitle>12 Years a Slave</LocalTitle> 
    <OriginalTitle>12 Years a Slave</OriginalTitle> 
    <ProductionYear>2013</ProductionYear> 
    <Added>23/05/2015 15:42:03</Added> 
    <IMDBrating>8,1</IMDBrating> 
    <ContentRating>R</ContentRating> 
    <MPAARating>R</MPAARating> 
    <IMDB>tt2024544</IMDB> 
    <IMDbId>tt2024544</IMDbId> 
    <TMDbId>76203</TMDbId> 
    <Budget>20000000</Budget> 
    <Revenue>187</Revenue> 
    <Language>English</Language> 
    <LanguageCode>en</LanguageCode> 
    <Country>GB</Country> 
    <RunningTime>134</RunningTime> 
    <Overview>In the antebellum United States,</Overview> 
    <Genres> 
     <Genre>Biography</Genre> 
     <Genre>Drama</Genre> 
     <Genre>History</Genre> 
    </Genres> 
</Title> 

我只需要提取我所有的XML文件中的某些標記成excel文件(如只有LocalTitle,ProductionYear,IMDBRatingIMDBId)我怎樣才能做到這一點,而無需花費數小時的複製和粘貼?

+1

您可以使用XSLT提取它們以創建可導入Excel的CSV文件。 – zx485

+0

我剛試過XSLT但沒有成功,還有其他想法? – dcf007

回答

0

重新考慮XSLT。 Excel VBA的MSXML對象維護一個XSLT 1.0處理器。此外,Excel可以直接導入轉化成XML工作簿與OpenXML方法:

XSLT(保存在外部爲的.xsl將在下面稱爲;僅返回所需的標籤)

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

    <xsl:template match="Title"> 
    <xsl:copy> 
     <xsl:apply-templates select="LocalTitle|ProductionYear|IMDBrating|IMDbId"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*"> 
    <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:transform> 

VBA

Public Sub XSLTransform() 
On Error GoTo ErrHandle 
    ' ADD MSXML v6.0 REFERENCE ' 
    Dim xmldoc As New MSXML2.DOMDocument60 
    Dim xslDoc As New MSXML2.DOMDocument60 
    Dim newDoc As New MSXML2.DOMDocument60 
    Dim newwkb As Workbook 

    ' LOAD XML AND XSL FILES ' 
    xslDoc.async = False 
    xmldoc.Load "C:\Path\To\Input.xml" 

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

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

    ' IMPORT TRANSFORMED XML ' 
    Set newwkb = Workbooks.OpenXML("C:\Path\To\Output.xml", , xlXmlLoadImportToList) 

    Exit Sub 

ErrHandle: 
    MsgBox Err.Number & " - " & Err.Description, vbCritical 
    Err.Raise xslDoc.parseError.ErrorCode, , xslDoc.parseError.reason 
    Exit Sub 

End Sub 

XML輸出

<?xml version="1.0" encoding="UTF-8"?> 
<Title> 
    <LocalTitle>12 Years a Slave</LocalTitle> 
    <ProductionYear>2013</ProductionYear> 
    <IMDBrating>8,1</IMDBrating> 
    <IMDbId>tt2024544</IMDbId> 
</Title>