Emmett Shear wrote:
> I can remove the byte order markers myself pretty easily; is there any
> way to force libxml to output empty tags in <foo></foo> form?

Hi Emmett,

I think what you want to manipulate is xmlSaveNoEmptyTags[1] sadly, I don't 
know 
enough C and can't find anything similar to try to copy.

All that said, Trans' hack is a good one:

$ irb --prompt xmp libxml2.irb && cat output.xml
require 'rubygems' # if installed via Gems
# => true
require 'xml/libxml'
# => true

doc = XML::Document.new()
# => <?xml version="1.0"?>

doc.root = XML::Node.new('root_node')
# => <root_node/>
root = doc.root
# => <root_node/>

root << elem1 = XML::Node.new('elem1', "")
# => <elem1></elem1>
elem1['attr1'] = 'val1'
# => "val1"
elem1['attr2'] = 'val2'
# => "val2"

root << elem2 = XML::Node.new('elem2', "")
# => <elem2></elem2>
elem2['attr1'] = 'val1'
# => "val1"
elem2['attr2'] = 'val2'
# => "val2"

root << elem3 = XML::Node.new('elem3', "")
# => <elem3></elem3>

# Namespace hack to reduce the numer of times XML:: is typed
include XML
# => Object
root << elem7 = Node.new('foo')
# => <foo/>
1.upto(10) {|i| elem7 << n = Node.new("bar#{i}", "") }
# => 1

format = true
# => true
doc.save('output.xml', format)
# => 352
<?xml version="1.0"?>
<root_node>
   <elem1 attr1="val1" attr2="val2"></elem1>
   <elem2 attr1="val1" attr2="val2"></elem2>
   <elem3></elem3>
   <foo>
     <bar1></bar1>
     <bar2></bar2>
     <bar3></bar3>
     <bar4></bar4>
     <bar5></bar5>
     <bar6></bar6>
     <bar7></bar7>
     <bar8></bar8>
     <bar9></bar9>
     <bar10></bar10>
   </foo>
</root_node>


HTH,
Keith
1. http://xmlsoft.org/html/libxml-globals.html#xmlSaveNoEmptyTags
_______________________________________________
libxml-devel mailing list
libxml-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/libxml-devel

Reply via email to