On 04/11/2012 09:51 AM, Ofer Schreiber wrote:
----- Original Message -----
> Hello,
>
> The code that we use in engine-setup to modify JBoss AS XML
> configuration files uses the following pattern:
>
> datasourceStr = '''
> <datasource ...>
> ...
> </datasource>
> '''
>
> xmlObj.addNodes("//datasource:subsystem/datasource:datasources",
> datasourceStr)
>
> This looks correct but is in fact generating a incorrect XML
> document,
> as the tags being added are not associated to a namespace. The
> resulting
> XML file will be correct, but the temporary representation in memory
> is
> not. This causes problems if you later, before writing out the
> modified
> file, try to use xpath expressions matching the added nodes: there
> will
> be no match.
>
> I would suggest that we change the pattern to something like this:
>
> datasourceStr = '''
> <any_dummy_tag xmlns="urn:jboss:domain:datasources:1.0">
> <datasource ...>
> ...
> </datasource>
> </any_dummy_tag>
> '''
> datasourceNodes =
> libxml2.parseDoc(datasourceStr).getRootElement().children
>
> xmlObje.addNodes("//datasource:subsystem/datasource:datasources",
> datasourceNodes)
>
> This way both the representation in memory and the resulting file are
> correct.
>
> Le me know what you think.
As long as it work, I have no problem with that, sounds the right thing to do.
btw- why would you want to use xpath on the "in memory" xml? (In your specific
case I mean, not in general)
The specific case is that in the Fedora 17 JBoss AS RPM the default
standaonle.xml file doesn't contain a <datasources> tag, so I wanted to
do something like this:
1. Check if the datasources tag is there, if not add it.
2. Add the new datasource tag, like we do now.
Step 2 fails: the xpath that we use in xmlObj.addNodes doesn't match the
datasources tag added in step 1 because the in memory XML is not using
the right namespace.
--
Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta
3ºD, 28016 Madrid, Spain
Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.