It looks like you have some curly brackets in the wrong place, try
{
for $ExcelColumnName_id in fme:get-list-attribute("list{}.ExcelColumnName")
return
<Location>{$ExcelColumnName_id}</Location>
}
Thank you that did the job. i dont supose you colud help me further. Basically i am trying to dynamically template and XML document from a list.
list Example
list{0}.NewValue (encoded: UTF-8) 1
list{0}.XMLFieldName (encoded: UTF-16LE) Key
list{1}.NewValue (encoded: UTF-8) Yes
list{1}.XMLFieldName (encoded: UTF-16LE) Licenced
list{2}.NewValue (encoded: UTF-8) No
list{2}.XMLFieldName (encoded: UTF-16LE) External
list{3}.NewValue (encoded: UTF-8) Tim
list{3}.XMLFieldName (encoded: UTF-16LE) Name
desired output
<Key>1</Key><Licenced>Yes</Licenced><External>No</External><Name>Tim</Name>
i have been trying this in the xmltemplater but it fails with the following error (sequence of more than one item can not be cast to QName). I think it is failing as it cant handle the element being defined by a list value.
element
{
{fme:get-attribute("Licencing Dataset URI")}
}
{
for $NewValue_id in fme:get-list-attribute("list{}.NewValue")
return
{$NewValue_id}
}
The other way i was thinking of tackling it is by the following whick also fails:
{
for $XMLFieldName_id in fme:get-list-attribute("list{}.XMLFieldName")
for $NewValue_id in fme:get-list-attribute("list{}.NewValue")
return
<{$XMLFieldName_id}>{$NewValue_id}</{$XMLFieldName_id}>
}
Sorry i am new to xquery but any pointer would be much appreciated.
Thank you that did the job. i dont supose you colud help me further. Basically i am trying to dynamically template and XML document from a list.
list Example
list{0}.NewValue (encoded: UTF-8) 1
list{0}.XMLFieldName (encoded: UTF-16LE) Key
list{1}.NewValue (encoded: UTF-8) Yes
list{1}.XMLFieldName (encoded: UTF-16LE) Licenced
list{2}.NewValue (encoded: UTF-8) No
list{2}.XMLFieldName (encoded: UTF-16LE) External
list{3}.NewValue (encoded: UTF-8) Tim
list{3}.XMLFieldName (encoded: UTF-16LE) Name
desired output
<Key>1</Key><Licenced>Yes</Licenced><External>No</External><Name>Tim</Name>
i have been trying this in the xmltemplater but it fails with the following error (sequence of more than one item can not be cast to QName). I think it is failing as it cant handle the element being defined by a list value.
element
{
{fme:get-attribute("Licencing Dataset URI")}
}
{
for $NewValue_id in fme:get-list-attribute("list{}.NewValue")
return
{$NewValue_id}
}
The other way i was thinking of tackling it is by the following whick also fails:
{
for $XMLFieldName_id in fme:get-list-attribute("list{}.XMLFieldName")
for $NewValue_id in fme:get-list-attribute("list{}.NewValue")
return
<{$XMLFieldName_id}>{$NewValue_id}</{$XMLFieldName_id}>
}
Sorry i am new to xquery but any pointer would be much appreciated.
I think you can do something like this, but I'm sure there are some other XML experts about who might be able to offer better advice, @Takashi Iijima
let $values := fme:get-list-attribute('list{}.NewValue')
let $names := fme:get-list-attribute('list{}.XMLFieldName')
for $v in $values
let $n := $nameseindex-of($values,$v)]
return
{ element {$n} {$v}}
I think you can do something like this, but I'm sure there are some other XML experts about who might be able to offer better advice, @Takashi Iijima
let $values := fme:get-list-attribute('list{}.NewValue')
let $names := fme:get-list-attribute('list{}.XMLFieldName')
for $v in $values
let $n := $namesindex-of($values,$v)]
return
{ element {$n} {$v}}
thank you @ebygomm , think its getting there :)
this fails as
invalid argument type for function fn:boolean(): effective boolean value not defined for sequence of more than one item that starts with "xs:integer"
i have tried a few variations of the above be get similar errors. @Takashi Iijima are you able to advise?
Many thanks
I think you can do something like this, but I'm sure there are some other XML experts about who might be able to offer better advice, @Takashi Iijima
let $values := fme:get-list-attribute('list{}.NewValue')
let $names := fme:get-list-attribute('list{}.XMLFieldName')
for $v in $values
let $n := $namesindex-of($values,$v)]
return
{ element {$n} {$v}}
i actually have a sequence in my list that can be used which is the order that the xml elements are required in. i see the index of function starts at 1 so there would be a mismatch there..
list{0}.NewValue (encoded: UTF-8) DH1111
list{0}.sequenced (64 bit real) 0
list{0}.XMLFieldName (encoded: UTF-16LE) BusinessKey
list{1}.NewValue (encoded: UTF-8) 2222
list{1}.sequenced (64 bit real) 1
list{1}.XMLFieldName (encoded: UTF-16LE) LicenceID
list{2}.NewValue (encoded: UTF-8) n/a
list{2}.sequenced (64 bit real) 2
list{2}.XMLFieldName (encoded: UTF-16LE) SLicenceID
I think you can do something like this, but I'm sure there are some other XML experts about who might be able to offer better advice, @Takashi Iijima
let $values := fme:get-list-attribute('list{}.NewValue')
let $names := fme:get-list-attribute('list{}.XMLFieldName')
for $v in $values
let $n := $namesindex-of($values,$v)]
return
{ element {$n} {$v}}
Any better?
let $values := fme:get-list-attribute('list{}.NewValue')
let $names := fme:get-list-attribute('list{}.XMLFieldName')
for $v at $index in $values
let $n := $names)$index]
return
{ element {$n} {$v}}
The issue with the one posted earlier was that you obviously have values that are the same for different elements and that causes a problem as it's trying to use the value as a lookup. This avoids that
I think you can do something like this, but I'm sure there are some other XML experts about who might be able to offer better advice, @Takashi Iijima
let $values := fme:get-list-attribute('list{}.NewValue')
let $names := fme:get-list-attribute('list{}.XMLFieldName')
for $v in $values
let $n := $namesindex-of($values,$v)]
return
{ element {$n} {$v}}
Thank you so much for your help - this worked a treat