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
|
||||
};
|
||||
|
||||
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,
|
||||
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)
|
||||
{
|
||||
FIXME("(%p)->(%s %p): stub\n", node, debugstr_w(name), item );
|
||||
if (item)
|
||||
xmlChar *nameA;
|
||||
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;
|
||||
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)
|
||||
|
|
|
@ -8579,13 +8579,9 @@ todo_wine
|
|||
|
||||
item = NULL;
|
||||
hr = IXMLDOMNamedNodeMap_getNamedItem(node_map, _bstr_("encoding"), &item);
|
||||
todo_wine
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
todo_wine
|
||||
ok(item != NULL, "got NULL\n");
|
||||
|
||||
if (hr == S_OK)
|
||||
{
|
||||
hr = IXMLDOMNode_get_nodeName(item, &bstr);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
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(!lstrcmpW(V_BSTR(&var), L"windows-1252"), "got %s\n", wine_dbgstr_w(V_BSTR(&var)));
|
||||
VariantClear(&var);
|
||||
}
|
||||
|
||||
IXMLDOMNamedNodeMap_Release(node_map);
|
||||
IXMLDOMNode_Release(node);
|
||||
|
|
Loading…
Reference in New Issue