Hi Senthil, I don't believe so. A DTD defines the allowed elements, their attributes, relationships between the elements, etc. It can be used to check whether a document conforms to the DTD, but you can't feed it into some piece of software (that I know of) and get a XML document out the other end. That's what XSL is all about, transforming one XML document into another XML document.
I'd say it's time to study the libxml programmer reference documents. It sounds like you're going to need to do XPATH queries in order to insert the data elements, so your best bet is to start reading through the APIs to see what's available. Does anyone else have a better suggestion? - Rush Senthil Nathan wrote: > Hi Rush, > The template is not so simple as shown. It's just a snippet of the actual > template xml. > > So, is there anything to do with DTD here, Doc. Type Definition?? Any > thoughts on this?? > > Thanks > Senthil Nathan R > > On 8/17/07, Rush Manbert <[EMAIL PROTECTED]> wrote: > >>Senthil Nathan wrote: >> >>>Hi Rush, >>>Gr8. Thanks for the info. >>> >>>And reg. the 4th point, I need to insert the values in the proper places >> >>of >> >>>the DOM tree. >>>You got it rightly. So how do I get that done?? >>> >>>Senthil >>> >>>On 8/17/07, Rush Manbert <[EMAIL PROTECTED]> wrote: >>> >>> >>>>Senthil Nathan wrote: >>>> >>>> >>>>>Hi, >>>>>I'm new to use libxml2. I need general clarifications of using libxml2 >>>> >>>>for >>>> >>>> >>>>>my application. >>>>> >>>>>Say, I have a XML content as, >>>>> >>>>><hostName> >>>>> <defaultValue>value</defaultValue> >>>>> <description> >>>>> <shortDescr>Hostname descr.</shortDescr> >>>>> <longDescr>long descr of Hostname</longDescr> >>>>> </description> >>>>> >>>>> <dataType>string</dataType> >>>>> <operations>set,delete</operations> >>>>> >>>>></hostName> >>>>> >><snip> >> >>>>>4. I have a template XML file and a config XML file. All the values for >>>> >>>>the >>>> >>>> >>>>>template should be available in the config file. Is that possible with >>>>>libxml2? >>>>> >>>> >>>>So you would have a template file that looks like this: >>>><hostName> >>>> <defaultValue></defaultValue> >>>> <description> >>>> <shortDescr></shortDescr> >>>> <longDescr></longDescr> >>>> </description> >>>> >>>> <dataType></dataType> >>>> <operations></operations> >>>> >>>></hostName> >>>> >>>>and, according to your example, you want to insert these values: >>>>value >>>>Hostname descr. >>>>long descr of Hostname >>>>string >>>>set,delete >>>> >>>>into the proper places in the DOM structure. >>>>Or maybe just into the proper places in a text file. >>>>Or maybe as attributes on some element. >>>> >>>>Do I understand this correctly? >>>> >>>>- Rush >>>> >>> >>Here are some options: >> >>1) If your template is really as simple as you have shown, it's probably >>easiest to just keep it as text in a std::string. Something like this: >> >>std::string myTemplate ( >>"<hostName>" >>" <defaultValue>%1</defaultValue>" >>" <description>" >>" <shortDescr>%2</shortDescr>" >>" <longDescr>%3</longDescr>" >>" </description>" >>" <dataType>%4</dataType>" >>" <operations>%5</operations>" >>"</hostName>"); >> >>Then, when you have assembled all of your values that you want in the >>config file, you just copy myTemplate, then use the std::string >>functions to find and replace %1 through %5. (You can wrap all this in >>an object to hide the nasty details.) Once you have the result, just >>parse it with xmlParseMemory() or xmlReadMemory() (or others?) to get >>the DOM tree. Of course, if your goal is to write the config file >>formatted as XML, then you already have the content in your string and >>you don't need libxml. >> >>2) Parse your template file to get a xmlDocPtr for it. When you need to >>generate the config file, copy the template using xmlCopyDoc(). Now you >>have a copy of the DOM tree for the template file and you need to insert >>the element data. I can see two ways to do this: >> >>a) Apply a XSL transformation to the tree. The downside to this is that >>you need to generate the style sheet on the fly, so that it contains the >>values that you need to insert. Again, if your template is as simple as >>your example, then the style sheet is also very simple, so is easy to >>generate. If your template file is more complicated, then the style >>sheet could get complicated as well. >> >>b) Using one of the xmlDocDump*() functions as an example, write >>yourself a node walker and have it call back for every node. Use the >>node (element) name to decide what to do, and insert your data into the >>node structure. This only works if your template file is as simple as >>you show, and each unique element name only shows up once. If your >>template really looks like this: >><hostList> >> <hostName> >> <defaultValue></defaultValue> >> <description> >> <shortDescr></shortDescr> >> <longDescr></longDescr> >> </description> >> <dataType></dataType> >> <operations></operations> >> </hostName> >> <hostName> >> <defaultValue></defaultValue> >> <description> >> <shortDescr></shortDescr> >> <longDescr></longDescr> >> </description> >> <dataType></dataType> >> <operations></operations> >> </hostName> >></hostList> >> >>then it gets harder, but I guess you could group your values you want to >>insert and count instances of each element, or instances of "hostName" >>to know which values you need to insert. If your template is really >>structured more like this, then this approach might be easier than using >>a XSL style sheet, because it's easier to understand how to write the >>logic in C or C++ than in XSL. It could be a maintenance nightmare too, >>if your template file format changes. >> >>I should also mention here that I believe this is the idea behind a SAX >>interface, so you might be able to use that instead of manipulating the >>DOM. (I have never used SAX, so don't know any details. I have written a >>node walker and done in-place modifications to the DOM tree.) >> >>3) Like 2, but don't bother to pre-parse your template because libxml >>has a really fast parser. Just parse the template file, then process the >>tree each time you need to write your config file. >> >>There may well be other approaches. These are all I can think of right >>now. Best of luck. >> >>Regards, >>Rush >> > > > > _______________________________________________ xml mailing list, project page http://xmlsoft.org/ [email protected] http://mail.gnome.org/mailman/listinfo/xml
