[英]How do I use CollectionViewSource to sort xml records by date?
[英]How do I use Access VBA to export to XML with headings for various records?
我正在使用 Application.ExportXML 編寫代碼,它將各種 Access 查詢導出到單個 XML 文件。 到目前為止,我有代碼並且它正在工作,但我想標記將導出的查詢數據中的每條記錄。 例如,我在名為“portOfCallList”的 XML 文件中列出了一個查詢,但我希望每條記錄都標記為“portOfCall”。 現在一個記錄看起來像這樣:
- <portOfCallList>
<arrivalDate>2015-07-17T00:00:00</arrivalDate>
<departureDate>2015-07-17T00:00:00</departureDate>
<portOfCallName>Southampton</portOfCallName>
<portOfCallCode>GBSOU</portOfCallCode>
</portOfCallList>
我希望它看起來像這樣:
- <portOfCallList>
- <portOfCall>
<arrivalDate>2015-07-17T00:00:00</arrivalDate>
<departureDate>2015-07-17T00:00:00</departureDate>
<portOfCallName>Southampton</portOfCallName>
<portOfCallCode>GBSOU</portOfCallCode>
</portOfCall>
'And then have various other records also labeled "portOfCall" before ending with
</portOfCallList>.
這是我唯一需要添加到我的代碼中的東西,因為代碼的其余部分完成了我需要它做的事情。 如果需要,我可以發布代碼。
讓我知道我是否可以進一步解釋,謝謝!
柯比
要設置 xml 文件的樣式,您需要使用XSLT 樣式表。 XSL 是一種特殊用途的聲明性語言,用於轉換 xml 文檔。
因此,根據 MS Access 的輸出,您可以使用 MS Access VBA 將原始輸出 xml 轉換為所需的修改后的 xml 格式:
首先,將以下內容另存為 .xsl 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:element name="portOfCallList"><xsl:text>
</xsl:text>
<xsl:for-each select="//portOfCallList">
<xsl:element name="portOfCall"><xsl:text>
</xsl:text>
<xsl:copy-of select="arrivalDate"/><xsl:text>
</xsl:text>
<xsl:copy-of select="departureDate"/><xsl:text>
</xsl:text>
<xsl:copy-of select="portOfCallName"/><xsl:text>
</xsl:text>
<xsl:copy-of select="portOfCallCode"/><xsl:text>
</xsl:text>
</xsl:element><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:element><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
其次,運行VBA:
Public Sub PortOfCallXML()
Dim xmlfile As Object, xslfile As Object, newxmlfile As Object
Dim xmlstr As String, xslstr As String, newxmlstr As String
Set xmlfile = CreateObject("MSXML2.DOMDocument")
Set xslfile = CreateObject("MSXML2.DOMDocument")
Set newxmlfile = CreateObject("MSXML2.DOMDocument")
xmlstr = "C:\Path\To\RawXMLFile.xml" ' ORIGINAL OUTPUT
xslstr = "C:\Path\To\XSLFile.xsl" ' FROM ABOVE SCRIPT
newxmlstr = "C:\Path\To\NewXMLFile.xml" ' NEW TRANSFORMED FILE
xmlfile.async = False
xmlfile.Load xmlstr
xslfile.async = False
xslfile.Load xslstr
xmlfile.transformNodeToObject xslfile, newxmlfile
newxmlfile.Save newxmlstr
Set xmlfile = Nothing
Set xslfile = Nothing
Set newxmlfile = Nothing
MsgBox "XML File successfully transformed!", vbInformation, "XML Transform Successful"
End Sub
輸出看起來像預期的一樣(我重復了您發布的數據作為示例):
<?xml version="1.0" encoding="UTF-8"?>
<portOfCallList>
<portOfCall>
<arrivalDate>2015-07-17T00:00:00</arrivalDate>
<departureDate>2015-07-17T00:00:00</departureDate>
<portOfCallName>Southampton</portOfCallName>
<portOfCallCode>GBSOU</portOfCallCode>
</portOfCall>
<portOfCall>
<arrivalDate>2015-07-17T00:00:00</arrivalDate>
<departureDate>2015-07-17T00:00:00</departureDate>
<portOfCallName>Southampton</portOfCallName>
<portOfCallCode>GBSOU</portOfCallCode>
</portOfCall>
...
</portOfCallList>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.