diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index b1f8a9d6739..0f515c47622 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -964,6 +964,8 @@ inline HRESULT VARIANT_from_xmlChar(xmlChar *str, VARIANT *v, BSTR type)
if(!lstrcmpiW(type, szInt))
V_VT(v) = VT_I4;
+ else if(!lstrcmpiW(type, szFixed))
+ V_VT(v) = VT_CY;
else
{
FIXME("Type handling not yet implemented\n");
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index a0dbe02d537..cb8aa4e2fb3 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -154,6 +154,7 @@ static const CHAR szTypeValueXML[] =
" 12.44\n"
" -3.71e3\n"
" -13\n"
+" 7322.9371\n"
"";
static const CHAR szBasicTransformSSXMLPart1[] =
@@ -4051,6 +4052,27 @@ static void test_NodeTypeValue(void)
IXMLDOMNode_Release(pNode);
}
+
+ hr = IXMLDOMDocument2_selectSingleNode(doc, _bstr_("root/fixed"), &pNode);
+ ok(hr == S_OK, "ret %08x\n", hr );
+ if(hr == S_OK)
+ {
+ VARIANT hlp_in, hlp_out;
+ V_VT(&hlp_in) = VT_BSTR;
+ V_BSTR(&hlp_in) = _bstr_("7322.9371");
+ V_VT(&hlp_out) = VT_CY;
+ ok(VariantChangeType(&hlp_out, &hlp_in, 0, VT_CY) == S_OK, "VariantChangeType failed\n");
+ VariantClear(&hlp_in);
+
+ hr = IXMLDOMNode_get_nodeTypedValue(pNode, &v);
+ ok(hr == S_OK, "ret %08x\n", hr );
+ ok(V_VT(&v) == VT_CY, "incorrect type\n");
+ ok(VarCyCmp(V_CY(&v), V_CY(&hlp_out)) == VARCMP_EQ, "incorrect value\n");
+ VariantClear(&hlp_out);
+ VariantClear(&v);
+
+ IXMLDOMNode_Release(pNode);
+ }
}
IXMLDOMDocument2_Release(doc);