自分がやろうとしていることの周りで踊っているように見えるアイテムをいくつか見つけました。私は本格的なプログラマーではありませんが、Excelで独自のマクロを作成しています。XMLファイルの構造を作成するのに役立つものを今作成しようとしています。
このコンテキストでは、Xpathの列と関連する値の1つがあります。XPathのリストを下に移動し、それぞれについて、必要に応じてパスに親と子とその値を作成します。必要なフィールドにフィルターをかけるために別の側面を追加しますが、私が苦労しているのは、各親ノードが存在するかどうかを確認し、必要に応じて作成してから、子とその値を追加するロジックです。
ボーナスは、出力ファイルが新しい行の各ノードでフォーマットされている場合、さらには子ノードが親からインデントされている場合ですが、それを作成することが私の主な関心事です。どんな助けでも大歓迎です、これは私に多くの時間を節約する可能性があります。
更新:私はこれを進歩させ、小さなサンプルファイルを作成することができました。行の戻り値やタブのインデントを使用してファイルをフォーマットする方法があるかどうかはまだわかりませんが、ファイルの作成の主要部分は順調に進んでいると思います。私はまだ反復ノードを処理する方法を調べる必要があります。これが私がこれまでに持っているものです、誰かが批評を持っているなら、それは大歓迎です:
Sub main()
Dim xmldoc As New DOMDocument60
Dim xpath As String
Dim outPath As String
outPath = "c:\temp\test.xml"
'just a small sample for now, xpaths in column 2 on spreadsheet
For i = 2 To 5
'xpaths I have leave off root element, so I add it here
xpath = "session/" & Cells(i, 2).Value
Call makeXPath(xmldoc, xpath)
Next
xmldoc.Save outPath
End Sub
Private Sub makeXPath(xmldoc As DOMDocument60, xpath As String)
Dim partsOfPath() As String
Dim oNodeList As IXMLDOMNodeList
Dim strXPathQuery As String
Dim sParent As String
Dim objRootElem As IXMLDOMElement
Dim objMemberElem As IXMLDOMElement
Dim objMemberName As IXMLDOMElement
Dim objParent As Object
Set objParent = xmldoc
partsOfPath = Split(xpath, "/")
For i = LBound(partsOfPath) To UBound(partsOfPath)
If strXPathQuery > "" Then strXPathQuery = strXPathQuery & "/"
strXPathQuery = strXPathQuery & partsOfPath(i)
Set oNodeList = xmldoc.SelectNodes(strXPathQuery)
If oNodeList.Length = 0 Then
'if I don't have the node, create it
Set objMemberElem = xmldoc.createElement(partsOfPath(i))
objParent.appendChild objMemberElem
'setting the parent for the next element of the path
Set objParent = objMemberElem
Else
'setting parent to first iteration, until I make adjustment otherwise later
Set objParent = oNodeList.Item(0)
End If
Next
End Sub
Update2-これは、アドレスの2番目の反復を持つxpathと出力例のサンプルです。
data/account/AcctNumber
data/account/Phone
data/account/address/Address1
data/account/address/City
data/account/address/State
data/account/address/ZIP
data/account/address/AddressType
<data>
<account>
<AcctNumber>
<Phone>
<address>
<Address1 />
<City />
<State />
<ZIP />
<AddressType />
</address>
<address>
<Address1 />
<City />
<State />
<ZIP />
<AddressType />
</address>
</account>
</data>