Wie Sie den Zugriff auf ein bestimmtes element-und Attributnamen, die in xml mit vba in excel?

Ich bin zu kämpfen, immer mit excel zu analysieren, die durch eine xml-Datei. Ich habe eine fülle von Beispielen, aber keiner scheint so Recht was ich Suche, und ich kann nicht scheinen, um Vergangenheit den Fehler "Objektvariable oder With-block variable nicht festgelegt"

Die xml ist wohlgeformt und sieht wie folgt aus:

<xml tag>
<PLMXML>
  <WorkflowTemplate name="">
    <argument name="">
    </argument>
  </WorkflowTemplate >
  <WorkflowTemplate name="">

etc.

Ich versuche Sie VBA verwenden, um den Wert der alle Namen der Kinder individuell und lernen Sie die Namen der Argumente. Ich habe immer die Fehlermeldung mit diesem code:

Dim xmlDoc As MSXML2.DOMDocument
Dim xmlElement As MSXML2.IXMLDOMElement
Dim xmlNode As MSXML2.IXMLDOMNode
Dim xmlAttribute As MSXML2.IXMLDOMAttribute

Set xmlDoc = New MSXML2.DOMDocument
xmlDoc.async = False
xmlDoc.validateOnParse = False

'ENTER THE PATH WHERE THE XML Workflow DOCUMENT IS STORED:
Dim DocumentPath As String
DocumentPath = InputBox("Enter the full path for the xml workflow document, example: C:\workflows\workflowseasy.xml", "Workflow XML File path", "C:\workflows\workflowseasy.xml")
xmlDoc.Load (DocumentPath)

Set xmlElement = xmlDoc.DocumentElement

Set xmlNode = xmlElement.SelectSingleNode("WorkflowTemplate[0]")


Set xmlAtribute = xmlNode.Attributes.getNamedItem("name")

Ich bin mir nicht klar, wie man die Daten in das Dokument mit diesem parser in excel-vba. Jegliche Hilfe würde sehr geschätzt werden. Ich habe derzeit Microsoft XML, v6.0 ausgewählte Referenzen.

UPDATE

Ich habe Graben mehr hinein und kommen mit dem folgenden code, aber ich bekomme immer noch den gleichen Fehler:

Dim xmlDoc As MSXML2.DOMDocument60
Dim xmlRoot As MSXML2.IXMLDOMNode
Dim xmlTemplate As MSXML2.IXMLDOMNode
Dim xmlAttributes As MSXML2.IXMLDOMNamedNodeMap
Dim xmlName As MSXML2.IXMLDOMNode
Dim xmlChildren As MSXML2.IXMLDOMNodeList
Dim xmlChild As MSXML2.IXMLDOMNode
Dim intI As Long
intI = 1

Set xmlDoc = New MSXML2.DOMDocument60
xmlDoc.async = False
xmlDoc.validateOnParse = False

'ENTER THE PATH WHERE THE XML Workflow DOCUMENT IS STORED:
Dim DocumentPath As String
DocumentPath = InputBox("Enter the full path for the xml workflow document, example: C:\workflows\workflowseasy.xml", "Workflow XML File path", "C:\workflows\workflowseasy.xml")
xmlDoc.Load (DocumentPath)

Set xmlRoot = xmlDoc.DocumentElement *****these say they are empty when debugging
Set xmlChildren = xmlRoot.ChildNodes *****these say they are empty when debugging
For Each xmlTemplate In xmlChildren  *****error occures here
    If xmlTemplate.nodeName = "WorkflowTemplate" Then
    Set xmlAttributes = xmlTemplate.Attributes
    Set xmlName = xmlAttributes.getNamedItem("name")
    ActiveSheet.Cells(int1, 1).Value = xmlName.Text
    Set xmlChildren = xmlTemplate.ChildNodes
    intI = intI + 1
    End If
Next xmlTemplate

LETZTE AKTUALISIERUNG**

Herausgefunden. Das laden der Datei war das Problem. Aus irgendeinem Grund übergeben Sie die Zeichenfolge aus einer msg-box nicht funktioniert, sondern übergeben Sie es von der gui file selector funktioniert. Hier ist der code landete ich mit.

    Dim xmlDoc As MSXML2.DOMDocument60
Dim xmlRoot As MSXML2.IXMLDOMNode
Dim xmlTemplate As MSXML2.IXMLDOMNode
Dim xmlAttributes As MSXML2.IXMLDOMNamedNodeMap
Dim xmlName As MSXML2.IXMLDOMNode
Dim xmlChildren As MSXML2.IXMLDOMNodeList
Dim xmlChild As MSXML2.IXMLDOMNode
Dim intI As Long
intI = 1

Set xmlDoc = New MSXML2.DOMDocument60
xmlDoc.async = False
xmlDoc.validateOnParse = False

'ENTER THE PATH WHERE THE XML Workflow DOCUMENT IS STORED:
Dim DocumentPath As String
With Application.FileDialog(msoFileDialogOpen)
.Title = "Choose File"
.AllowMultiSelect = False
.Show
'DocumentPath.Show
DocumentPath = .SelectedItems(1)
End With

xmlDoc.Load (DocumentPath)

Set xmlRoot = xmlDoc.DocumentElement
Set xmlChildren = xmlRoot.ChildNodes
For Each xmlTemplate In xmlChildren
    If xmlTemplate.nodeName = "WorkflowTemplate" Then
    Set xmlAttributes = xmlTemplate.Attributes
    Set xmlName = xmlAttributes.getNamedItem("name")
    ActiveSheet.Cells(int1, 1).Value = xmlName.Text
    Set xmlChildren = xmlTemplate.ChildNodes
    intI = intI + 1
    End If
Next xmlTemplate

Derzeit der code bricht an der Zuordnung von Wert Abschnitt, aber Sie durch den code werden die Variablen aus, ziehen Sie die korrekten Werte und ziehen in das xml korrekt ist.

Welcher Zeile bekommst du den Fehler?
Es scheitert wenn ich das Set xmlNode = xmlElement.SelectSingleNode.
Ich habe versucht, mit diesem statt, um zu sehen, ob ich zumindest die Werte, aber das scheint es nicht zu geben mir nichts. Überspringt die for-Schleife komplett-Set xmlList = xmlDoc.SelectNodes("//WorkflowTemplate") Für Jedes xmlNode-Objekte Im xmlList-Objekt Debug.Drucken xmlNode.Text Neben xmlNode
Ich habe das Spiel mit ein bißchen mehr und ich verstehe die XPath für die meisten Teil, verstehe ich nicht, das DOMDocument-Elemente sehr gut und wie Sie zu verwenden sind. Wenn ich versuche, den Namen eines Attributs der xml-Tags, die ich nicht wissen, wie man dorthin navigieren. Verwende ich die IXMLDOMNodeList und dann versuchen, auf ein Element in der Liste? Kann ich einfach direkt den Wert für das name-Attribut auf den ersten workflow-Muster so etwas wie das WorkflowTemplate[1][@name] und, um den Wert für Sie?
Ich habe nur getan diese Art der Codierung ein-oder zweimal. Es war verwirrend, aber ich war schließlich in der Lage puzzle-mein Weg zu Ihr. Leider weiß ich nicht die Antworten auf Ihre Fragen. Viel Glück!

InformationsquelleAutor user2513952 | 2013-06-23

Schreibe einen Kommentar