2010-03-12 10 views
4

J'aime afficher du contenu (X) HTML dans une application Qt en utilisant QtWebKit. Le contenu doit être généré à partir de documents XML via XSLT. Comme je suis nouveau à Qt, mes questions sont les suivantes:
1) QtWebKit peut-il afficher des documents XML avec l'ensemble d'éléments xml-stylesheet?
2) Qt peut-il appliquer XSLT à un document XML et renvoyer le résultat sous forme de chaîne ou l'écrire dans un fichier?Traitement XSLT avec Qt

Répondre

0

QtWebKit et xslt étaient toujours séparés, leur combinaison était toujours un todo - je ne sais pas quel est le statut actuel mais vous pouvez facilement le tester avec les exemples.

Ou suivez http://labs.trolltech.com/blogs/2010/03/03/qtwebkit-releases/

+0

J'ai essayé aujourd'hui la démo du navigateur de Qt. Il est capable d'appliquer XSLT si l'élément xml-stylesheet est défini, mais il semble il ne sera pas possible de définir dynamiquement l'élément sans modifier les données xml sous-jacentes. – swegi

10

Avec QXmlQuery vous pouvez traiter un document XML par rapport à un modèle XSL puis passer le résultat aux QWebView::setHtml(QString) (versions récentes de Qt utilisera QWebEngineView::setHtml(..).

QString out; 
QXmlQuery query(QXmlQuery::XSLT20); 
query.setFocus(QUrl("myInput.xml")); 
query.setQuery(QUrl("myStylesheet.xsl")); 
query.evaluateTo(&out); 
webview->setHtml(out); 

Vous pouvez trouver ce code et plus d'informations dans le QXmlQuery documentation

+0

QXmlQuery permet-il de résoudre les liens xsl incorporés dans le fichier XML au lieu d'appeler setQuery ?. Je veux dire, dans votre extrait de code, si "myInput.xml" contient le lien vers le fichier XSL, et que le fichier XSL contient également des références à d'autres fichiers XSL de manière récursive, comment QXmlQuery peut-il être appliqué pour charger toutes les feuilles de style? Peut-il déjà le faire? Ou setQuery est-il toujours requis? (dans ce cas, il faut scanner les fichiers XML et XSL pour construire un arbre de dépendance ou quelque chose comme ça). – Claudix

+0

@Claudix, si votre question est toujours valide, pensez à la poser [comme nouvelle question] (http://stackoverflow.com/questions/ask). Et oui, c'est possible. – Abel