Some characters cannot be used inside the value of a node or attribute within an XML file.
The characters are:
Original character | Escaped character |
---|---|
" | " |
' | ' |
< | < |
> | > |
& | & |
The table above indicates, that you should use the sequence for the escaped character instead of the original character on the left.
Another way to get around the limitation of the invalid characters is to include the value within a CDATA sequence like so:
Start sequence:
<![CDATA[
End sequence:
]]>
This means e.g. that this node is valid:
<Company_Name>![CDATA[InterForm & Kim A/S]]</Company_Name>
- even though the & sign is invalid and not escaped like above.
This section explains how you can repair an invalid input XML file and make it valid even though one or more invalid characters might be found in a value and the <![CDATA[ sequence mentioned above is not used.
A prerequisite for this is, that you can list the nodes with this potential problem.
In this example we get an XML file with this node:
<Company_Name>InterForm & Kim A/S</Company_Name>
Which makes the XML file invalid.
What we need to do is to search for the string: <Company_Name> and then replace it with <Company_Name>![CDATA[ and also search for the string </Company_Name> and replace this with ]]</Company_Name>.
This can be done with a velocity template, which in InterFormNG2 can be used as a mail-template.
The velocity template can be setup like this as the contents:
#set( $out = $payload.replace("<Company_Name>", '<Company_Name><![CDATA[').replace("</Company_Name>", ']]></Company_Name>') )
${out}
A prerequisite for this is, that a variable, payload has been defined and filled with the contents of the (invalid) input XML file prior to calling this mail-template. So the first step is to copy the line above to a simple text file with the extension .vm and upload that as a mail-template in InterFormNG2.
This mail-template can now be used in a workflow that looks like below:
The workflow consists of these components:
This is just the workflow, that in this case monitors an input directory for input XML files.
This copies the payload (the invalid XML file) into a variable, payload.
Create Email message text from a template
This calls the mail-template with the contents mentioned above. This overwrites the payload with the changed XML file (with the ${out} command).
Here we save the corrected XML file for verification, but the XML file could of course also be used as input for a merge into print, PDF, email or other.