2011-06-22 3 views
1

J'essaie de créer un nouveau document XHTML à partir d'un autre document XHTML. Je veux seulement utiliser certains des balises DIV dans l'ancien document XHTML, mais je ne suis pas sûr de le faire correctement. Pour commencer, si je veux choisir une balise spéciale DIV avec ID = mbContent, pourrais-je utiliserSélectionnez la balise DIV avec XSLT?

<xsl:template match="x:div[@id='mbContent']"> 

Cette balise DIV contient d'autres DIVs et du contenu comme des images et ainsi de suite. Comment faire si je veux utiliser le même style CSS appliqué au contenu? Existe-t-il un moyen de copier le style CSS ou dois-je ajouter un nouveau style CSS et comment le faire? Comme le nouveau document XHTML va faire partie de XHTML, je ne peux pas utiliser la balise HEAD et mettre une référence à la feuille de style CSS de cette façon. Hmm, mais si j'utilise la feuille de style CSS qui va être dans la tête du document XHTML principal, peut-être que je pourrais appliquer ces styles CSS à cette DIV, ou? Comment appliquer des styles dans le nouveau document XHTML?

Je suis un peu confus, mais j'espère que ma question n'est pas de prêter à confusion ?! :)

Salut! J'ai besoin d'une nouvelle aide puisque le code ci-dessous ne fonctionne pas pour moi. C'est ce qui ne fonctionne pas xmlns:x="http://www.w3.org/1999/xhtml" and "x:div[@id='mbContent']" Je pense que c'est parce que j'utilise un outil CMS qui a un module proxy qui n'accepte pas ce code pour une raison étrange. Par conséquent je cherche une solution alternative pour ajouter la CLASSE ou l'identification et ajoute également des valeurs aux éléments de DIV en employant ceci plutôt xsl:apply-templates select="//*[@id='mbSubMenu']" et utilise également la copie comme dans l'exemple ci-dessous? Preciate une nouvelle aide! Merci! :)

+1

Possible [en double] (http://stackoverflow.com/questions/6431330/css-style-and-xslt). –

Répondre

1

Le Xpath utilisé dans l'expression est correct jusqu'à ce que vous utilisiez 'x' comme xmlns dans le document XSLT.

Le modèle correspondra au <div> à condition que son ID soit mbContent et que le contexte sélectionné contienne tous les descendants.

Vous pouvez modifier le CSS en ligne pour les éléments. Depuis que vous avez dit que cette partie va être dans un autre document XHTML. Vous pouvez choisir XML comme sortie. Modifiez le CSS en ligne si vous le souhaitez. Vous pouvez également leur affecter différentes classes afin qu'elles prennent automatiquement en compte les styles globaux.

L'idée est que, vu un document XML, vous le transformez en un autre document XML. Par conséquent, vous pouvez appliquer des styles comme vous le souhaitez.

J'espère que cela répond à votre question.

P.S. utilise les xmlns appropriés dans l'expression XPath.

Supposons que le document HTML soit suivi.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <title></title> 
</head> 
<body> 
    <div id="mbContent"> 
     <div> 
      <span>Some complex structure</span> 
     </div>  
    </div> 
</body> 

Appliquer le XSL suivant

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="http://www.w3.org/1999/xhtml" 
xmlns:x="http://www.w3.org/1999/xhtml" 
exclude-result-prefixes="x"> 

<xsl:output method="xml" indent="yes"/> 

<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="x:div[@id='mbContent']"> 
    <xsl:copy> 
     <xsl:attribute name="class"> 
      <xsl:text>someNewStyle</xsl:text> 
     </xsl:attribute> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

Cela se traduira par la sortie suivante.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <title/> 
</head> 
<body> 
    <div class="someNewStyle" id="mbContent"> 
     <div> 
      <span>Some complex structure</span> 
     </div> 
    </div> 
</body> 

Vous pouvez modifier le en fonction de votre XSL besoin.

Cordialement,

Ravi.

+0

Merci, malgré le fait que j'utilise xmlns: x = "http://www.w3.org/1999/XSL/Transform" J'obtiens du contenu en dehors de DIV mbContent. (Seulement dans le texte) Comment puis-je appliquer des styles en ligne à ce DIV? – user790843

+0

Répondre à votre question commentaire sur le contenu en dehors de DIV mbContent (seulement dans Text): Cela semble être la sortie du modèle standard intégré. Pour éviter cela, assurez-vous d'attraper autre chose avec un modèle vide comme à la fin de votre code XSLT. – Andreas

+0

Lorsque j'essaie le code ci-dessus dans le navigateur et que je regarde la source, il n'y a pas de classe = "someNewStyle" ajouté !? J'ai mis cette ligne de code Sur la première ligne du code HTML? Est-ce la seule façon de transformer un document XHTML en insérant une référence dans le document XHTML? J'espérais que vous pourriez lire ou lier dans la source d'une autre manière si le fichier XSL et le fichier XHTML se trouvaient dans le même dossier sur un serveur? Preciate réponse à mon commentaire! :) – user790843