0

I'm facing a issue in AMPScript. I need to manipulate an XML feed. This is what it looks like :

<articles>
<article>
    <title>Lorem Ipsum</title>
    <short_title>Lorem</short_title>
    <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed scelerisque metus sit amet tempus posuere. Phasellus pulvinar, libero vel ultricies sodales</description>
    <link>http://www.mylink.com</link>
    <taxonomy_menu1>
        <taxonomy_param>mySpe1</taxonomy_param>
        <taxonomy_param>mySpe2</taxonomy_param>
        <taxonomy_param>mySpe3</taxonomy_param>
    </taxonomy_menu1>
</article>
<article>
    <title>Lorem Ipsum</title>
    <short_title>Lorem</short_title>
    <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed scelerisque metus sit amet tempus posuere. Phasellus pulvinar, libero vel ultricies sodales</description>
    <link>http://www.mylink.com</link>
    <taxonomy_menu1>
        <taxonomy_param>mySpe1</taxonomy_param>
        <taxonomy_param>mySpe2</taxonomy_param>
        <taxonomy_param>mySpe3</taxonomy_param>
    </taxonomy_menu1>
</article>
<article>
    <title>Lorem Ipsum</title>
    <short_title>Lorem</short_title>
    <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed scelerisque metus sit amet tempus posuere. Phasellus pulvinar, libero vel ultricies sodales</description>
    <link>http://www.mylink.com</link>
    <taxonomy_menu1>
        <taxonomy_param>mySpe1</taxonomy_param>
        <taxonomy_param>mySpe2</taxonomy_param>
        <taxonomy_param>mySpe3</taxonomy_param>
    </taxonomy_menu1>
</article>

Here is my question : How can I have the count of taxonomy_param in each article ?

I know how to manipulate and display basics informations like here, the short_title or description, by using the classics BuildRowsetFromXML and Field(Row(@titles,1),"Value"). But in this configuration I'm stuck.

If I want to display the count of taxonomy_param, I'll get 9. That's correct. But later, I'll have to loop inside of each taxonomy_param, of each taxonomy_menu1 of each article to display what I want.

I hope it's clear :)

Thanks in advance !

1
  • If you're question has been answered, please mark it. Nov 10, 2015 at 14:41

1 Answer 1

1

The key is how you reference the nodes via XPATH:

Code:

%%[

var @xml, @articleRowset, @i, @j, @path, @articleTitle, @taxonomyMenuRowset, @taxonomyParam

set @xml = "<articles><article><title>Lorem Ipsum 1</title><short_title>Lorem1</short_title><description>Lorem ipsum dolor...</description><link>http://www.mylink.com</link><taxonomy_menu1><taxonomy_param>mySpe1</taxonomy_param><taxonomy_param>mySpe2</taxonomy_param><taxonomy_param>mySpe3</taxonomy_param></taxonomy_menu1></article><article><title>Lorem Ipsum 2</title><short_title>Lorem</short_title><description>Lorem ipsum dolor...</description><link>http://www.mylink.com</link><taxonomy_menu1><taxonomy_param>mySpe1</taxonomy_param><taxonomy_param>mySpe2</taxonomy_param><taxonomy_param>mySpe3</taxonomy_param></taxonomy_menu1></article><article><title>Lorem Ipsum 3</title><short_title>Lorem</short_title><description>Lorem ipsum dolor...</description><link>http://www.mylink.com</link><taxonomy_menu1><taxonomy_param>mySpe1</taxonomy_param><taxonomy_param>mySpe2</taxonomy_param><taxonomy_param>mySpe3</taxonomy_param></taxonomy_menu1></article></articles>"

set @path = concat("/articles/article")
set @articleRowset = BuildRowsetFromXML(@xml,@path,1) 

if rowcount(@articleRowSet) > 0 then

  for @i = 1 to rowcount(@articleRowSet) do

     set @path = concat("/articles/article[",@i,"]/title")
     set @articleTitle = Field(Row(BuildRowsetFromXML(@xml,@path,1),1),'Value')
     outputLine(concat("<br>articleTitle: ",@articleTitle))

     set @path =  concat("/articles/article[",@i,"]/taxonomy_menu1/taxonomy_param")  
     set @taxonomyMenuRowset = BuildRowsetFromXML(@xml,@path,1)

     if rowcount(@taxonomyMenuRowset) > 0 then

        for @j = 1 to rowcount(@taxonomyMenuRowset) do
            set @path = concat("/articles/article[",@i,"]/taxonomy_menu1/taxonomy_param[",@j,"]")
            set @taxonomyParam = Field(Row(BuildRowsetFromXML(@xml,@path,1),1),'Value')
            outputLine(concat("<br>&nbsp;&nbsp;taxonomyParam: ",@taxonomyParam))
        next @j

     endif

  next @i  

endif

]%%

Output:

articleTitle: Lorem Ipsum 1 
  taxonomyParam: mySpe1 
  taxonomyParam: mySpe2 
  taxonomyParam: mySpe3 
articleTitle: Lorem Ipsum 2 
  taxonomyParam: mySpe1 
  taxonomyParam: mySpe2 
  taxonomyParam: mySpe3 
articleTitle: Lorem Ipsum 3 
  taxonomyParam: mySpe1 
  taxonomyParam: mySpe2 
  taxonomyParam: mySpe3 

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .