Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Loop through XML

Explorer ,
Feb 01, 2012 Feb 01, 2012

I am looking for an example of how to loop through an xml structure, preferrably in VBScript, but I will take a Javascript example and try to figure out how to adapt it.

Is a FOR EACH loop possible? In normal VBScript you can do something like this...

‘strQuery = “/ProfilesInfo/Profiles/ProfileInfo/Profile/Fields/Field [Name='ProfileUri' or Name= 'Age'] /(Name|Value)”

Set colNodes = xmlDoc.selectNodes( strQuery )

If colNodes.length>0 Then

For Each objNode in colNodes

Print objNode.nodeName & “: ” & objNode.text

Next

is it possible to do something like this with XML? Maybe something like

For each node in myDocument.XMLElements.Item(1)

     {do something}

Next

If there is a better way, and I am sure there is, I'll take an example of that instead. 

I am sure there is probably a way to do it with XPath, but I haven't been able to find any examples of using XPath with VBScript. 

If anyone has an example of how to use XPath with VBScript I would greatly appreciate it.

Thank you

TOPICS
Scripting
2.1K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Feb 01, 2012 Feb 01, 2012
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Valorous Hero ,
Feb 01, 2012 Feb 01, 2012

You can do this using XML rules. Check out a chapter of the same name in the InDesign CS5 Scripting Guide (VB version). There you will find many examples.

You can indicate which nodes you want to process with XPath. For example, this will match on every XML element in the XML structure:

Public Property Get xpath

     xpath = "//*"

End Property

And this matches all following sibling XML elements of the first "item" XML element:

Public Property Get xpath

     xpath = "/xmlElement/item[1]/following-sibling::*"

End Property

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Feb 02, 2012 Feb 02, 2012
LATEST

Kasyan, thank you for the reply.  I looked at that part in the book and I have tried using the example code, but I am having difficulty in understanding how it is being used, maybe you, or someone can help to explain it. 

So in an example like this:

Class ProcessChildrenRule

     Public Property Get name

          name = "ProcessChildrenRule"

     End Property

     Public Property Get xpath

          xpath = "//XMLElement"

     End Property

     Public Function apply(myXMLElement, myRuleProcessor)

          glueCode_processChildren(myRuleProcessor)

          With myXMLElement

               myXMLElement.XMLattributes.Item(1).Value

               myStory.InsertionPoints.Item(-1).Contents =

               .XMLAttributes.Item(1).Value & vbCr

          End With

     apply = false

     End Function

End Class

There are 5 things that I am not understanding. 

1.  How is "xpath" being used?  I don't see another occurance of it other than when the variable xpath is set.

2.  How is name being used?  I don't see another occurance of it other than when the variable name is set.

3.  Why is "Public Function apply" created in each class?  In the examples in the book, that function exists in each Class.  Why not just create the function outside of the class and call it from inside the class?

4. Where is the "apply" function being called from? It doesn't get called from inside or outside the class on the example pages anywhere?

5. Where are the values of myXMLElement and myRuleProcessor being set before they are used in the function?

Even in the examples you gave, once I set the xpath value, what do I do with it after that?  How do I write out the value of what I am searching for with the xpath?

So going back to my original question, if I set xpath = "/devices/device", how do I loop through each "device" node and write them out?  That is where it is breaking down for me.  I haven't seen any examples in the book or in the downloaded example code that show how to do that. 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines