XML special characters

8 views (last 30 days)
Joan Puig
Joan Puig on 16 Sep 2011
Hi,
I have some code that generates an xml string. For some reason, when I try to use special characters the xmlread function is not able to read it back in:
clear();
clc();
docFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
docBuilder = docFactory.newDocumentBuilder();
doc = docBuilder.newDocument();
stuff = doc.createElement('stuff');
stuff.setAttribute('value','ó'); % If a regular character is used, it works fine
doc.appendChild(stuff);
factory = javax.xml.transform.TransformerFactory.newInstance();
transformer = factory.newTransformer();
writer = java.io.StringWriter();
result = javax.xml.transform.stream.StreamResult(writer);
source = javax.xml.transform.dom.DOMSource(doc);
transformer.transform(source, result);
writer.close();
xml = char(writer.toString())
jString = java.lang.String(xml);
readOut = xmlread(java.io.ByteArrayInputStream(jString.getBytes()));
This is the xml string that gets generated:
xml =
<?xml version="1.0" encoding="utf-8"?><stuff value="ó"/>
This is the error it gives me:
[Fatal Error] :1:53: Invalid byte 2 of 4-byte UTF-8 sequence.
??? Java exception occurred:
org.xml.sax.SAXParseException: Invalid byte 2 of 4-byte UTF-8 sequence.
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
Error in ==> xmlread at 98
parseResult = p.parse(fileName);
Error in ==> scr_xml_encoding at 20
readOut = xmlread(java.io.ByteArrayInputStream(jString.getBytes()));
>>
Do you have any idea of how to fix it?
Thanks, Joan

Answers (2)

Walter Roberson
Walter Roberson on 16 Sep 2011
You will probably have to use native2unicode() to build the value to set() as the attribute. In MATLAB, 'ó' is just a 16 bit value, spanning the first 65536 unicode code points; you need to do a UTF-8 encoding of it.
  1 Comment
Joan Puig
Joan Puig on 17 Sep 2011
Hi Walter,
Thanks for your answer. I looks like native2unicode() could be used to get the expected results, but I have tried a few combinations and was not able to get it working. Could you please be a little bit more specific?
Thanks,
Joan

Sign in to comment.


Silvia Muñoz Polo
Silvia Muñoz Polo on 11 Sep 2013
Hi, I have the same problem. The native2unicode() function works at Matlab environment but the generated xml file can't be edited. Any idea to solve this problem? Thanks.

Categories

Find more on Characters and Strings in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!