This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: best way to generate form from xml+schema?
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] best way to generate form from xml+schema?
- From: "Chris Bayes" <chris at bayes dot co dot uk>
- Date: Tue, 16 Oct 2001 14:22:12 +0100
- Reply-To: xsl-list at lists dot mulberrytech dot com
>At the moment, the only idea I have for that is
> to give the cgi parameters names which reflect the xml
> structure (eg not 'email', but
> 'programItem:submitter:email'). Write the parameters to a
> temporary file. Then use a stylesheet heavily dependent on
> 'substring-after' functions to generate an xml file with
> expanded versions of the parameters (eg <programItem>
> <submitter>
> <email>a@b.c</email>
> </submitter>
> </programItem>
> Then read this into a second stylesheet which also reads in
> the schema to generate the full xml file.
Wow! I would suggest a liberal use of <div elements in your form that
reflect your xml. Then instead of submitting the form as is you have an
onsubmit function that wanders over your form constructing an xml string
which you then post back to the server. Something like.
<form name="x" onsubmit="post(this)">
<div name="xml_element_name">
<input type="text" name="xml_element_name"
cjb:type="attribute" />
<input type="text" name="xml_element_name"
cjb:type="text" />
<div name="xml_element_name">
<input type="text" name="xml_element_name"
cjb:type="attribute" />
<input type="text" name="xml_element_name"
cjb:type="text" />
</div>
</div>
</form>
function post(obj){
var postString = wander(obj);
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
xmlhttp.Open("POST", "http://someplace", false);
xmlhttp.Send(postString);
}
function wander(obj){
var retStr = "";
if (obj.tagName == "DIV"){
retStr += "<" + obj.name + " ";
for (var i=0; i<obj.childNodes.length; i++){
if (obj.childNodes[i].tagName == "INPUT"){
if
(obj.childNodes[i].getAttribute("cjb:type") == "attribute"){
retStr += obj.childNodes[i].name
+ "=" + obj.childNodes[i].value;
}else{
retStr += ">" +
obj.childNodes[i].value;
}
}else{
retStr += wander(obj.childNodes[i]);
}
}
retStr += "</" + obj.name + ">";
}
return retStr;
}
It would be a lot easier to use xslt and use the form.innerHTML as the
input to the transform but the problem is that the innerHTML is nowhere
near valid xml.
Ciao Chris
XML/XSL Portal
http://www.bayes.co.uk/xml
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list