1

自分がやろうとしていることの周りで踊っているように見えるアイテムをいくつか見つけました。私は本格的なプログラマーではありませんが、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>
4

0 に答える 0