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
<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>
CodePudding user response:
I believe your current issue and your goal are as follows.
Logger.log(items[1].getChild('g:id'))
returnsnull
.- You want to retrieve the value from
<g:id>###</g:id>
initem
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.