2

Null results when trying to access children of the first item. I'm using Google App Scripts.

function parseXml() {
  var url = 'https://example.xml';
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();

  var channel = root.getChild('channel');
  var items = channel.getChildren('item');
  Logger.log(items[1].getValue());
  Logger.log(items[1].getChildren())
  Logger.log(items[1].getChild('g:id'))

}

Output:

5:37:46 PM  Notice  Execution started
5:37:57 PM  Info    09771332150202100001A&C Ainsworth Wines - A&C Ainsworth Wines - 2021
5:37:57 PM  Info    [[Element: <g:id [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:title [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:description [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:link [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:image_link [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:availability [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:price [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:item_group_id [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:brand [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:gender [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:condition [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:google_product_category [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:product_type [Namespace: http://base.google.com/ns/1.0]/>], [Element: <g:spec [Namespace: http://base.google.com/ns/1.0]/>], [Element: <quantity/>], [Element: <option_values/>]]
5:37:57 PM  Info    null
5:37:58 PM  Notice  Execution completed

Finally, XML example. Sorry, I can't share the source URL.

<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
 <item>
  <g:id>09771332140202100001</g:id>
   <g:title>A&C Ainsworth Wines - A&C Ainsworth Wines - 2021</g:title>
   <g:description></g:description>
 </item>
2
  • Can you provide the source URL so this can be tested? Commented Jun 8, 2022 at 8:38
  • Sorry, I can't. Commented Jun 12, 2022 at 7:12

1 Answer 1

2

I believe your current issue and your goal are as follows.

  • Logger.log(items[1].getChild('g:id')) returns null.
  • You want to retrieve the value from <g:id>###</g:id> in item by modifying your script.

When I saw your showing XML and your script, in your script, I thought that the namespace is required to be used. When this is reflected in your script, it becomes as follows.

From:

Logger.log(items[1].getChild('g:id'))

To:

Logger.log(items[1].getChild('id', XmlService.getNamespace("http://base.google.com/ns/1.0")))

or

Logger.log(items[1].getChild('id', XmlService.getNamespace("g", "http://base.google.com/ns/1.0")))

or

Logger.log(items[1].getChild('id', XmlService.getNamespace("http://base.google.com/ns/1.0")).getValue())

or

Logger.log(items[1].getChild('id', XmlService.getNamespace("g", "http://base.google.com/ns/1.0")).getValue())
  • Although I'm not sure about your actual XML data and I cannot test this, I thought that in the case of your XML data, Logger.log(items[1].getChild('id', XmlService.getNamespace("http://base.google.com/ns/1.0")).getValue()) might work.

Reference:

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks. Logger.log(items[1].getChild('id', XmlService.getNamespace("base.google.com/ns/1.0"))) worked perfectly
@fasito Thank you for replying and testing it. I'm glad your issue was resolved. Thank you, too.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.