Commit 42db8b43 authored by Alistair Leslie-Hughes's avatar Alistair Leslie-Hughes Committed by Alexandre Julliard

msxml3: Corrected transformNode.

parent 9c8c3300
...@@ -44,6 +44,10 @@ ...@@ -44,6 +44,10 @@
# include <libxslt/xsltInternals.h> # include <libxslt/xsltInternals.h>
#endif #endif
#ifdef HAVE_LIBXML2
# include <libxml/HTMLtree.h>
#endif
#include "wine/debug.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(msxml); WINE_DEFAULT_DEBUG_CHANNEL(msxml);
...@@ -1065,21 +1069,39 @@ static HRESULT WINAPI xmlnode_transformNode( ...@@ -1065,21 +1069,39 @@ static HRESULT WINAPI xmlnode_transformNode(
result = xsltApplyStylesheet(xsltSS, This->node->doc, NULL); result = xsltApplyStylesheet(xsltSS, This->node->doc, NULL);
if(result) if(result)
{ {
xmlBufferPtr pXmlBuf; const xmlChar *pContent;
int nSize;
pXmlBuf = xmlBufferCreate(); if(result->type == XML_HTML_DOCUMENT_NODE)
if(pXmlBuf)
{ {
nSize = xmlNodeDump(pXmlBuf, NULL, (xmlNodePtr)result, 0, 0); xmlOutputBufferPtr pOutput = xmlAllocOutputBuffer(NULL);
if(nSize > 0) if(pOutput)
{ {
const xmlChar *pContent; htmlDocContentDumpOutput(pOutput, result->doc, NULL);
if(pOutput)
pContent = xmlBufferContent(pXmlBuf); {
*xmlString = bstr_from_xmlChar(pContent); pContent = xmlBufferContent(pOutput->buffer);
*xmlString = bstr_from_xmlChar(pContent);
}
xmlOutputBufferClose(pOutput);
}
}
else
{
xmlBufferPtr pXmlBuf;
int nSize;
xmlBufferFree(pXmlBuf); pXmlBuf = xmlBufferCreate();
if(pXmlBuf)
{
nSize = xmlNodeDump(pXmlBuf, NULL, (xmlNodePtr)result, 0, 0);
if(nSize > 0)
{
pContent = xmlBufferContent(pXmlBuf);
*xmlString = bstr_from_xmlChar(pContent);
xmlBufferFree(pXmlBuf);
}
} }
} }
} }
......
...@@ -143,10 +143,9 @@ static const CHAR szTransformSSXML[] = ...@@ -143,10 +143,9 @@ static const CHAR szTransformSSXML[] =
"</xsl:stylesheet>"; "</xsl:stylesheet>";
static const CHAR szTransformOutput[] = static const CHAR szTransformOutput[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" "<html><body><h1>"
"<html><body><h1>\n" "Hello World"
"Hello World\n" "</h1></body></html>";
"</h1></body></html>\n";
static const WCHAR szNonExistentFile[] = { static const WCHAR szNonExistentFile[] = {
'c', ':', '\\', 'N', 'o', 'n', 'e', 'x', 'i', 's', 't', 'e', 'n', 't', '.', 'x', 'm', 'l', 0 'c', ':', '\\', 'N', 'o', 'n', 'e', 'x', 'i', 's', 't', 'e', 'n', 't', '.', 'x', 'm', 'l', 0
...@@ -242,6 +241,19 @@ static VARIANT _variantbstr_(const char *str) ...@@ -242,6 +241,19 @@ static VARIANT _variantbstr_(const char *str)
return v; return v;
} }
static BOOL compareIgnoreReturns(BSTR sLeft, BSTR sRight)
{
for (;;)
{
while (*sLeft == '\r' || *sLeft == '\n') sLeft++;
while (*sRight == '\r' || *sRight == '\n') sRight++;
if (*sLeft != *sRight) return FALSE;
if (!*sLeft) return TRUE;
sLeft++;
sRight++;
}
}
static void get_str_for_type(DOMNodeType type, char *buf) static void get_str_for_type(DOMNodeType type, char *buf)
{ {
switch (type) switch (type)
...@@ -3193,7 +3205,7 @@ static void test_testTransforms(void) ...@@ -3193,7 +3205,7 @@ static void test_testTransforms(void)
hr = IXMLDOMDocument_transformNode(doc, pNode, &bOut); hr = IXMLDOMDocument_transformNode(doc, pNode, &bOut);
ok(hr == S_OK, "ret %08x\n", hr ); ok(hr == S_OK, "ret %08x\n", hr );
ok( !lstrcmpW( bOut, _bstr_(szTransformOutput) ), "Stylesheet output not correct\n"); ok( compareIgnoreReturns( bOut, _bstr_(szTransformOutput)), "Stylesheet output not correct\n");
IXMLDOMNode_Release(pNode); IXMLDOMNode_Release(pNode);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment