msxml3: Implement IXMLDOMNamedNodeMap::getNamedItem() for a processing instruction node.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
769aac0021
commit
a39df8bb61
|
@ -817,6 +817,27 @@ static const struct IXMLDOMProcessingInstructionVtbl dom_pi_vtbl =
|
||||||
dom_pi_put_data
|
dom_pi_put_data
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static xmlAttrPtr node_has_prop(const xmlNode *node, const xmlChar *name)
|
||||||
|
{
|
||||||
|
xmlAttrPtr prop;
|
||||||
|
|
||||||
|
/* xmlHasNsProp accepts only nodes of type XML_ELEMENT_NODE,
|
||||||
|
* so we have to look for an attribute in the node by hand.
|
||||||
|
*/
|
||||||
|
|
||||||
|
prop = node->properties;
|
||||||
|
|
||||||
|
while (prop)
|
||||||
|
{
|
||||||
|
if (xmlStrEqual(prop->name, name))
|
||||||
|
return prop;
|
||||||
|
|
||||||
|
prop = prop->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT dom_pi_get_qualified_item(const xmlNodePtr node, BSTR name, BSTR uri,
|
static HRESULT dom_pi_get_qualified_item(const xmlNodePtr node, BSTR name, BSTR uri,
|
||||||
IXMLDOMNode **item)
|
IXMLDOMNode **item)
|
||||||
{
|
{
|
||||||
|
@ -826,10 +847,28 @@ static HRESULT dom_pi_get_qualified_item(const xmlNodePtr node, BSTR name, BSTR
|
||||||
|
|
||||||
static HRESULT dom_pi_get_named_item(const xmlNodePtr node, BSTR name, IXMLDOMNode **item)
|
static HRESULT dom_pi_get_named_item(const xmlNodePtr node, BSTR name, IXMLDOMNode **item)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(%s %p): stub\n", node, debugstr_w(name), item );
|
xmlChar *nameA;
|
||||||
if (item)
|
xmlAttrPtr attr;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%s %p)\n", node, debugstr_w(name), item);
|
||||||
|
|
||||||
|
if (!item) return E_POINTER;
|
||||||
|
|
||||||
|
nameA = xmlchar_from_wchar(name);
|
||||||
|
if (!nameA) return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
attr = node_has_prop(node, nameA);
|
||||||
|
heap_free(nameA);
|
||||||
|
|
||||||
|
if (!attr)
|
||||||
|
{
|
||||||
*item = NULL;
|
*item = NULL;
|
||||||
return S_FALSE;
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*item = create_node((xmlNodePtr)attr);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT dom_pi_set_named_item(xmlNodePtr node, IXMLDOMNode *newItem, IXMLDOMNode **namedItem)
|
static HRESULT dom_pi_set_named_item(xmlNodePtr node, IXMLDOMNode *newItem, IXMLDOMNode **namedItem)
|
||||||
|
|
|
@ -8579,13 +8579,9 @@ todo_wine
|
||||||
|
|
||||||
item = NULL;
|
item = NULL;
|
||||||
hr = IXMLDOMNamedNodeMap_getNamedItem(node_map, _bstr_("encoding"), &item);
|
hr = IXMLDOMNamedNodeMap_getNamedItem(node_map, _bstr_("encoding"), &item);
|
||||||
todo_wine
|
|
||||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
todo_wine
|
|
||||||
ok(item != NULL, "got NULL\n");
|
ok(item != NULL, "got NULL\n");
|
||||||
|
|
||||||
if (hr == S_OK)
|
|
||||||
{
|
|
||||||
hr = IXMLDOMNode_get_nodeName(item, &bstr);
|
hr = IXMLDOMNode_get_nodeName(item, &bstr);
|
||||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
ok(!lstrcmpW(bstr, L"encoding"), "got %s\n", wine_dbgstr_w(bstr));
|
ok(!lstrcmpW(bstr, L"encoding"), "got %s\n", wine_dbgstr_w(bstr));
|
||||||
|
@ -8597,7 +8593,6 @@ if (hr == S_OK)
|
||||||
ok(V_VT(&var) == VT_BSTR, "got %u\n", V_VT(&var));
|
ok(V_VT(&var) == VT_BSTR, "got %u\n", V_VT(&var));
|
||||||
ok(!lstrcmpW(V_BSTR(&var), L"windows-1252"), "got %s\n", wine_dbgstr_w(V_BSTR(&var)));
|
ok(!lstrcmpW(V_BSTR(&var), L"windows-1252"), "got %s\n", wine_dbgstr_w(V_BSTR(&var)));
|
||||||
VariantClear(&var);
|
VariantClear(&var);
|
||||||
}
|
|
||||||
|
|
||||||
IXMLDOMNamedNodeMap_Release(node_map);
|
IXMLDOMNamedNodeMap_Release(node_map);
|
||||||
IXMLDOMNode_Release(node);
|
IXMLDOMNode_Release(node);
|
||||||
|
|
Loading…
Reference in New Issue