XML String Literals

Austin (archive)

Usenet Archive
Joined
Apr 14, 2002
Messages
43
Reaction score
0
Hello

I am wondering if anyone knows if there is a way to store string literals within an XML tag.

For instance I would like to store HTML formatting data for an attribute but it keeps getting picked up as a tag by the XML parser.

eg...
<name>John</name>
<prettyName><HTML><BR>John</BR></HTML><prettyName>

The second line causes the parser to think <HTML> and <BR> are XML tags when they are not. I have tried <prettyName>"<HTML><BR>John</BR></HTML>"<prettyName> and <prettyName>'<HTML><BR>John</BR>'</HTML><prettyName> with no success.

prettyData should be = <HTML><BR>John</BR></HTML>

not returned as prettyData
<HTML>
<BR> = John </BR>
</HTML>

Does anyone know how to achieve my desired effect without having to declre tags manually for the html properties that I need, then reassemble into HTML later?

Kind Regards
A.Hulley
 

Philippe Poulard

Usenet Archive
Joined
Dec 20, 2001
Messages
412
Reaction score
0
Austin said:
Hello

I am wondering if anyone knows if there is a way to store string literals within an XML tag.

For instance I would like to store HTML formatting data for an attribute but it keeps getting picked up as a tag by the XML parser.

eg...
<name>John</name>
<prettyName><HTML><BR>John</BR></HTML><prettyName>

The second line causes the parser to think <HTML> and <BR> are XML tags when they are not. I have tried <prettyName>"<HTML><BR>John</BR></HTML>"<prettyName> and <prettyName>'<HTML><BR>John</BR>'</HTML><prettyName> with no success.

prettyData should be = <HTML><BR>John</BR></HTML>

not returned as prettyData
<HTML>
<BR> = John </BR>
</HTML>

Does anyone know how to achieve my desired effect without having to declre tags manually for the html properties that I need, then reassemble into HTML later?

Kind Regards
A.Hulley

Hi,

as your html-like substructure seems to be well-formed, i suggest to keep these datas as tags, because many tools will allow to copy the structure on an output stream. Furthermore, you also will be able to extract the content data. However, i don't think that html tags should be present in such structures; it may be useful for documentary sections of xml documents to use xhtml tags, but useless in your case; many technologies, such as XSLT will allow you to produce the expected output like this <HTML><BR>John</BR></HTML> from the input data like this <prettyName>John<prettyName> with a simple xslt template.

however, < and > may be escaped with &lt; and &gt;
when many escaping is needed use
<![CDATA[ <HTML><BR>John</BR></HTML> ]]> instead
 

Andy Dingley

Usenet Archive
Joined
Feb 23, 2000
Messages
3,303
Reaction score
0
I am wondering if anyone knows if there is a way to store string literals within an XML tag.

Yes, but the definition of "string" has issues with angle brackets.
For instance I would like to store HTML formatting data for an attribute but it keeps getting picked up as a tag by the XML parser.

There are three ways; namespacing, entity encoding and CDATA sections.
I'd do it by entity encoding.

Namespacing is the easiest and "cleanest" in an XML sense. It's particularly good for mixing XML elements from multiple schemas. It's also quite easy to work with from XSLT.

Some people, mainly old SGML hands, have arguments against namespacing. Try Googling comp.infosystems.www.authoring.html for comments from Arjun Ray.

The biggest problem with namespacing is that it requires all components to be well-formed XML. Fragments must also be balanced fragments. This is no problem with XHTML, but it's a minor hassle with HTML and it can be very difficult if you have to accept any HTML (which can be badly malformed) from other sources.

Entity encoding is how it's done in RSS. You would probably find looking at RSS useful here. Entities which are awkward as "string" characters in XML [<, >, &] are represented by their entity equivalents

Your example would look like this:
<name>John</name>
<prettyName>&lt;HTML&gt;&lt;BR&gt;John &amp;
Jane&lt;/BR&gt;&lt;/HTML&gt;<prettyName>

The main advantage of entity encoding is that it's simple to do, although it requires some string-handling tools, like regexes. You can't do this in XSLT (practically) but you can do it easily by calling JavaScript extensions from within XSLT.

Be careful to track what is encoded and what isn't. You can safely double-encode HTML (ampersands simply expand to "&amp;amp;") but you must de-encode it afterwards by the _same_ number of operations.

CDATA sections are perhaps "The SGMLWay", but personally I find entity encoding easier to work with. You wrap your literal string in a wrapper that says "This is not XML, just treat it literally"

Your example would look like this:
<name>John</name>
<prettyName><![CDATA[ <HTML><BR>John</BR></HTML>]]><prettyName>

Remember to also replace the sequence "]]>" inside the string with "]]>]]&gt;<![CDATA[ " . You can't "escape" this sequence, but you can concatenate two CDATA sections around it. It's a rare problem to encounter, but if you ever handle the content of comp.text.xml through XML tools, then you're going to meet it !
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
548,208
Messages
3,104,798
Members
249,594
Latest member
henrywalsh

Latest Threads

Top