Bonjour,
J'ai un problème de namespace xsl.
Je voudrais copier les éléments d'un xml pour générer un xml comme suit:
XML d'entrée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <autnresponse xmlns:autn="http://mon.namespace1.com/"> <responsedata> <autn:numhits>10</autn:numhits> <autn:totalhits>490</autn:totalhits> <autn:hit> <autn:content> <DOCUMENTS> <DOCUMENT> <SOME_TAG/> </DOCUMENT> </DOCUMENTS> </autn:content> </autn:hit> </responsedata> </autnresponse>Comme vous pouvez le voir, le contenu du tag <content> contient tous les noeuds présents dans <autn:content>/<DOCUMENTS>, sauf que le namespace de ceux est devenu celui par default: http://mon.namespace2.com/search alors qu'avant il avait le ns par default null (car pas de déclaration xmlns="...").
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Il me faudrait générer un xml de la sorte: <?xml version="1.0" encoding="utf-8"?> <searchResults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://mon.namespace2.com/search" xsi:schemaLocation="http://mon.namespace2.com/search file:somewhere_on_computer.xsd"> <numhits>10</numhits> <totalhits>490</totalhits> <language/> <result> <content> <DOCUMENT> <SOME_TAG/> </DOCUMENT> </content> </result> </searchResults>
Pour ce faire, j'utilise la xsl suivante
ce qui me génère
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:autn="http://mon.namespace1.com/" xmlns="http://mon.namespace2.com/search" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="autn" version="2.0"> <xsl:output method="xml" encoding="utf-8" indent="yes" /> <xsl:template match="/"> <searchResults xsi:schemaLocation="file:somewhere_on_computer.xsd"> <numhits><xsl:value-of select="//autn:numhits"/></numhits> <totalhits><xsl:value-of select="//autn:totalhits"/></totalhits> <xsl:apply-templates select="//autn:hit"/> </searchResults> </xsl:template> <xsl:template match="//autn:hit"> <result > <content > <xsl:apply-templates select="//DOCUMENTS/"/> </content> </result> </xsl:template> <xsl:template match="DOCUMENTS"> <xsl:apply-templates select="@* | node()"/> </xsl:template> <xsl:template match="@* | node()"> <xsl:copy copy-namespaces="no" > <xsl:copy-of select="@*" /> <xsl:apply-templates select="node()" > <xsl:sort select="name()"/> </xsl:apply-templates> </xsl:copy> </xsl:template> </xsl:stylesheet>
Donc le tag Document possède le namespace vide, mais je voudrais qu'il possède le ns par défaut:"http://mon.namespace2.com/search"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Il me faudrait générer un xml de la sorte: <?xml version="1.0" encoding="utf-8"?> <searchResults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://mon.namespace2.com/search" xsi:schemaLocation="http://mon.namespace2.com/search file:somewhere_on_computer.xsd"> <numhits>10</numhits> <totalhits>490</totalhits> <language/> <result> <content> <DOCUMENT xmlns=""> <SOME_TAG/> </DOCUMENT> </content> </result> </searchResults>
A cause de cela ma validation xsd ne passe pas.
Quelqu'un connait il un moyen pour faire cela?
Je précise que je n'ai pas la main sur le xml d'entrée.
Merci d'avance
Partager