REXML -> attributes with single/double quotes

S

Stephan Kämper

Hi all,

when I write a previously read XML using REXML, all attribute values are
single quoted. Unfortunately the application I'm feeding that XML to
(currently) can't cope with that.

I tried to rad and understand the XML Standard, but couldn't find the
exact place where it says, that both single and double quoted strings
are allowed to delimit attribute values.
If this the right place?


[10] AttValue ::= '"' ([^<&"] | Reference)* '"'
| "'" ([^<&'] | Reference)* "'"


From: http://www.w3.org/TR/REC-xml/
Section 2.3 "Common Syntactic Constructs"

That seems to say that attributes are either delimited by single quotes
or by double quotes.

The easy way, would be to follow the advice Sean Russel gave on Tue, 24
Jun 2003 10:02:02 +0900 in ruby-talk [74129], which was this:
In the meantime, if you really need this and are willing to hack the
sources, override REXML::Attribute::to_string(). Do something like
this in the application that generates the XML:

REXML::Attribute.class_eval( %q^
def to_string
%Q[#@expanded_name="#{to_s().gsub(/"/, '&quot;')}"]
end
^ )

This will rewrite the method that is used to produce the XML fragment
for an Attribute.

That does indeed help. Thanks for answering a question I didn't have at
that time (back in 2003). :)

Is there a more elegant way to achieve this?


Happy rubying and you're a great community out there.

Stephan
 
D

daz

Stephan said:
Hi all,

when I write a previously read XML using REXML, all attribute values are
single quoted. Unfortunately the application I'm feeding that XML to
(currently) can't cope with that.

Throw it away :)
I tried to rad and understand the XML Standard, but couldn't find the
exact place where it says, that both single and double quoted strings
are allowed to delimit attribute values.
If this the right place?


[10] AttValue ::= '"' ([^<&"] | Reference)* '"'
| "'" ([^<&'] | Reference)* "'"


From: http://www.w3.org/TR/REC-xml/
Section 2.3 "Common Syntactic Constructs"

That seems to say that attributes are either delimited by single quotes
or by double quotes.

http://www.w3.org/TR/REC-xml/#sec-notation

"string"

matches a literal string matching that given inside the double quotes.

'string'

matches a literal string matching that given inside the single quotes.


REXML::Attribute.class_eval( %q^
def to_string
%Q[#@expanded_name="#{to_s().gsub(/"/, '&quot;')}"]
end
^ )

Is there a more elegant way to achieve this?

I'd be disappointed if there wasn't -- sorry no help there, atm.


daz
 

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
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top