Solved

XMLTemplater: "<>" brackets from strings are converted to html encodings in output

  • 13 January 2022
  • 6 replies
  • 5 views

Userlevel 3
Badge +12

Hi, I am using a PythonCaller to create an XML string. When I send this string through an XMLTemplater, all "<>" brackets are converted to "&lt;" and "&gt;" (html encodings). Adding a StringReplacer/StringPairReplacer to replace all brackets works fine but can take some time for larger content . Is there a way to prevent the XMLTemplater from converting brackets to encoded brackets?

 

String valuebecomes:

Result_XMLTemplater

icon

Best answer by takashi 13 January 2022, 16:37

View original

6 replies

Badge +10

If you want to insert an xml fragment into the xml template you need to use {fme:get-xml-attribute("xml")}. For this to work however, it needs to be a valid xml fragment which your example is not

Userlevel 3
Badge +12

Thanks

Userlevel 2
Badge +17

Hi @Jasper Wisbecq​ , in this case, this template (XQuery) expression would work.

<Asset>{
    for $x in tokenize(fme:get-attribute("output"),'\s')
    return parse-xml($x)
}</Asset>

 

Badge +10

Hi @Jasper Wisbecq​ , in this case, this template (XQuery) expression would work.

<Asset>{
    for $x in tokenize(fme:get-attribute("output"),'\s')
    return parse-xml($x)
}</Asset>

 

These are the sort of examples that all need to be gathered up and put in the helpfiles as I mentioned @Dale Lutz​ 

Userlevel 3
Badge +12

If you want to insert an xml fragment into the xml template you need to use {fme:get-xml-attribute("xml")}. For this to work however, it needs to be a valid xml fragment which your example is not

If I add a root node to the fragment, the get-xml-attribute works perfectly indeed. However, for my particular case, the root node is undesired, and I would need a StringReplacer to remove it again after the XMLTemplater. Though this would already be much faster than having to replace all brackets, the solution of @Takashi Iijima​ suits even better

Userlevel 3
Badge +12

Hi @Jasper Wisbecq​ , in this case, this template (XQuery) expression would work.

<Asset>{
    for $x in tokenize(fme:get-attribute("output"),'\s')
    return parse-xml($x)
}</Asset>

 

Great, thank you Takashi

Reply