ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> Tclxml-users
Tclxml-users
Re: [Tclxml-users] itcl/tk-like calling syntax for TclDom
by Detlef Groth other posts by this author
Sep 15 2004 8:26AM messages near this date
[Tclxml-users] RE: Tclxml 3.0 problems | [Tclxml-users] Tclxml 3.0 problems
Hello, Ok I modified the the file dom.tcl inside TclDom3.0 in order to (get|set|remove)Attri
butes:

Here is the diff:
$ diff /d/home/dgroth/cvs/tclhttpd/customlib/tcldom3.0/dom.tcl /d/tcl-lib/tcldo
m3.0/dom.tcl
1211,1222d1210
<         *Attribute {
<             switch $node(node:nodeType) {
<                 textNode {}
<                 default {
<                     if {[llength $args] == 1} {
<                         set result [dom::element $method $token [lindex $args
0]]
<                     } else {
<                         set result [dom::element $method $token [lindex $args
0] [lindex $args 1]]
<                     }
<                 }
<             }
<         }

Might add something for (get|set|remove)AttributeNS too.

Now the following works for TclDom/tcl:

% lappend auto_path d:/home/dgroth/cvs/tclhttpd/customlib
D:/tcl-programme/tclkit/tclkit8.4.7-mingw.exe/lib/tcl8.4 D:/tcl-programme/tclkit/tclkit8.4.7
-mingw.exe/lib D:/tcl-programme/tclkit/tclkit8.4.7-mingw.exe/lib/tk8.4 d:/home/dgroth/cvs/tc
lhttpd/customlib
(tclkit) 2 % package require dom	
3.0
(tclkit) 3 % set doc [dom::DOMImplementation create]
::dom::tcl::document1::Document
(tclkit) 4 % set top [$doc createElement html]
::dom::tcl::document1::node2
(tclkit) 5 % set head [$doc createElement head]
::dom::tcl::document1::node6
(tclkit) 6 % $top appendChild $head
::dom::tcl::document1::node6
(tclkit) 7 % set title [$doc createElement title]
::dom::tcl::document1::node13
(tclkit) 8 % $head appendChild $title
::dom::tcl::document1::node13
(tclkit) 9 % $title appendChild [$doc createTextNode "MPIMG Berlin - Mouse Database"]
::dom::tcl::document1::node20
(tclkit) 10 % set body [$doc createElement body]
::dom::tcl::document1::node30
(tclkit) 11 % $top appendChild $body
::dom::tcl::document1::node30
(tclkit) 12 % $body setAttribute bgcolor black
black
(tclkit) 13 % $body getAttribute bgcolor
black
(tclkit) 14 % dom::serialize $doc
<?xml version='1.0'?> 
<!DOCTYPE html> 
<html> <head><title>MPIMG Berlin - Mouse Database</title></head><body bgcolor="black"/></html
> 

Looks good.

Should I add this to the feature requests?

regards,
Detlef



> 
> On 15/09/2004, at 12:37 AM, Detlef Groth wrote:
> 
> > I like the itcl/tk- and Tdom-like calling conventions for tdom:
> 
> TclDOM version 3.0 has introduced that style of API, but not uniformly 
> throughout the package (yet).
> 
> At the time that I was implementing this feature I had an issue with 
> overloading the document/node commands with methods for multiple node 
> classes.  For example, an element node is both a Node and an Element 
> class object, so should have the methods for both the ::dom::node and 
> ::dom::element commands.  However, a TextNode or a Document node will 
> have a different set a methods.
> 
> > (tclkit) 82 % set doc [dom::DOMImplementation create]
> > ::dom::tcl::document7::Document
> > (tclkit) 83 % set top [dom::document createElement $doc html]
> > ::dom::tcl::document7::node2
> > (tclkit) 84 % set title [$doc createElement title]
> > ::dom::tcl::document7::node6
> > (tclkit) 85 % $top appendChild $title
> > ::dom::tcl::document7::node6
> > (tclkit) 86 % set body [$doc createElement body]
> > ::dom::tcl::document7::node13
> > (tclkit) 87 % $top appendChild $body
> > ::dom::tcl::document7::node13
> > (tclkit) 88 % $body setAttribute bgcolor black
> > unknown method "setAttribute"
> >
> > This does not work, however this:
> >
> > (tclkit) 90 % dom::element setAttribute $body bgcolor black
> > black
> 
> Yes, that exactly the issue raised above.  "setAttribute" is a method 
> of the ::dom::element command.  You'd like to be able to do:
> 
> $body setAttribute bgcolor black
> 
> What happens if you do:
> 
> $doc setAttribute bgcolor black
> 
> The latter should probably throw an exception.
> 
> Making the former work would mean either defining the node command as a 
> separate function and implementing every method from every node class 
> command (for both Tcl and libxml2), or modifying the node command to 
> call the class-specific function if the method is not defined 
> (actually, the latter would be the best approach).
> 
> > which is for me a little bit awkward, and I always forget to add the
> > nodename after the (get|set)Attribute-command. I am used to javascript
> > where we say something like:
> >
> > var input = window.document.createElement("input");
> > input.setAttribute("name", "inputvalue");
> 
> Having to remember to add the node token does make the API a bit 
> awkward, I agree.
> 
> > It should be not to difficult to write some simple wrapper classes
> > with Snit or something similar. But using snit may slow down the code. 
> > Did
> > anyone have a better suggestion?
> 
> Do it in the TclDOM package itself; please submit a feature request to 
> SF.
> 
> At the moment I'm flat-out with other (paid-for) projects so I won't be 
> able to do anything about it in the short-term.  However, maybe someone 
> else will step up to the plate and give it a go.
> 
> >  As a side effect the same code might run with tdom also.
> 
> Ah... that's a sore point.  You go talk to the tDOM people about 
> compatibility :-(
> 
> Cheers,
> Steve Ball
> 
> ---
> 
> Steve Ball            |   XSLT Standard Library   | Training & Seminars
> Zveno Pty Ltd         |     Web Tcl Complete      |   XML XSL Schemas
> http://www.zveno.com/ |      TclXML TclDOM        | Tcl, Web Development
> Steve.Ball@[...].com  +---------------------------+---------------------
> Ph. +61 2 6242 4099   |   Mobile (0413) 594 462   | Fax +61 2 6242 4099
> 

-- 
Dr. Detlef Groth
Max-Planck-Institut
fuer Molekulare Genetik
Ihnestr. 63/73
D-14195 Berlin
Tel.: + 49 30 - 8413 1235


-------------------------------------------------------
This SF.Net email is sponsored by: thawte's Crypto Challenge Vl
Crack the code and win a Sony DCRHC40 MiniDV Digital Handycam
Camcorder. More prizes in the weekly Lunch Hour Challenge.
Sign up NOW http://ad.doubleclick.net/clk;10740251;10262165;m
_______________________________________________
Tclxml-users mailing list
Tclxml-users@[...].net
https://lists.sourceforge.net/lists/listinfo/tclxml-users

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved