I'm using %XML.Reader to open an XML file and use it's correlate method to try and convert it to a class.
The conversion fails with an error of:
>
> This is the XML >
> ><span class="hljs-tag"><<span class="hljs-name">Fields</span> <span class="hljs-attr">xmlns:xsi</span>=<span class="hljs-string">"http://www.w3.org/2001/XMLSchema-instance"</span> ></span>
<span class="hljs-tag"><<span class="hljs-name">Field</span> <span class="hljs-attr">xsi:type</span>=<span class="hljs-string">"UDFLookupFieldInstance"</span> <span class="hljs-attr">ID</span>=<span class="hljs-string">"2925"</span> <span class="hljs-attr">Description</span>=<span class="hljs-string">"FIRE ALARM ACTIVE"</span> <span class="hljs-attr">Suffix</span>=<span class="hljs-string">"FDT_ACTIVATE"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">Fields</span>></span>
>
> > This error is produced when xsi:type is any value, when it is left blank conversion using the code listed below is successful. >
> >> The XML I'm working with is produced by a third party and can't changed. >
> >> I can't figure out why. Can anyone help? >
> >> The classes are as follows: >
> ><span class="hljs-keyword">Class</span> Field <span class="hljs-keyword">Extends</span> (<span class="hljs-built_in">%Persistent</span>, <span class="hljs-built_in">%XML.Adaptor</span>)
{
<span class="hljs-keyword">Parameter</span> XMLFORMAT = <span class="hljs-string">"literal"</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Parameter</span> XMLNAME = <span class="hljs-string">"Field"</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Parameter</span> NAMESPACE = <span class="hljs-string">"http://www.civica.co.uk/ParisConnect/ConnectXml/1.0/Messaging"</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Property</span> Type <span class="hljs-keyword">As</span> <span class="hljs-built_in">%String</span>(XMLNAME = <span class="hljs-string">"xsi:type"</span>, XMLPROJECTION = <span class="hljs-string">"ATTRIBUTE"</span>)<span class="hljs-comment">;</span>
<span class="hljs-keyword">Property</span> Suffix <span class="hljs-keyword">As</span> <span class="hljs-built_in">%String</span>(XMLNAME = <span class="hljs-string">"Suffix"</span>, XMLPROJECTION = <span class="hljs-string">"ATTRIBUTE"</span>)<span class="hljs-comment">;</span>
<span class="hljs-keyword">Property</span> Description <span class="hljs-keyword">As</span> <span class="hljs-built_in">%String</span>(XMLNAME = <span class="hljs-string">"Description"</span>, XMLPROJECTION = <span class="hljs-string">"ATTRIBUTE"</span>)<span class="hljs-comment">;</span>
<span class="hljs-keyword">Property</span> ID <span class="hljs-keyword">As</span> <span class="hljs-built_in">%String</span>(XMLNAME = <span class="hljs-string">"ID"</span>, XMLPROJECTION = <span class="hljs-string">"ATTRIBUTE"</span>)<span class="hljs-comment">;</span>
}
<span class="hljs-keyword">Class</span> Fields <span class="hljs-keyword">Extends</span> (<span class="hljs-built_in">%Persistent</span>, <span class="hljs-built_in">%XML.Adaptor</span>)
{
<span class="hljs-keyword">Parameter</span> XMLFORMAT = <span class="hljs-string">"literal"</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Parameter</span> XMLNAME = <span class="hljs-string">"Fields"</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Parameter</span> XMLSEQUENCE = <span class="hljs-number">1</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Parameter</span> NAMESPACE = <span class="hljs-string">"http://www.civica.co.uk/ParisConnect/ConnectXml/1.0/Messaging"</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Parameter</span> SUPPRESSTYPEPREFIX = <span class="hljs-number">1</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Property</span> Fields <span class="hljs-keyword">As</span> list Of Field(XMLNAME = <span class="hljs-string">"Field"</span>, XMLPROJECTION = <span class="hljs-string">"ELEMENT"</span>)<span class="hljs-comment">;</span>
}
>
> > And I test with >
> ><span class="hljs-keyword">ClassMethod</span> TestFieldsCorrelate()
{
<span class="hljs-keyword">Set</span> reader = <span class="hljs-keyword">##class</span>(<span class="hljs-built_in">%XML.Reader</span>).<span class="hljs-built_in">%New</span>()
<span class="hljs-keyword">Set</span> tSc=reader.OpenFile(<span class="hljs-string">"E:\temp\Fields.xml"</span>)
<span class="hljs-keyword">#dim</span> match <span class="hljs-keyword">as</span> Fields
<span class="hljs-keyword">Do</span> reader.Correlate(<span class="hljs-string">"Fields"</span>,<span class="hljs-string">"Fields"</span>)
<span class="hljs-keyword">While</span> reader.Next(.match,.tSc) {
<span class="hljs-keyword">w</span> !, <span class="hljs-string">"Hurrah"</span>
}
<span class="hljs-keyword">If</span> <span class="hljs-built_in">$$$ISERR</span>(tSc) {
<span class="hljs-keyword">w</span> !, <span class="hljs-built_in">$SYSTEM</span>.Status.GetErrorText(tSc)
}
}
>
> > Any feedback, thoughts, comments would be greatfuly received. >
> >> Cheers >
> >> Andy >
</body></html>