msxml3: Handle namespaces in removeNamedItem.
Signed-off-by: Daniel Lehman <dlehman25@gmail.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f726691bdc
commit
38844dc31e
|
@ -1749,8 +1749,43 @@ static HRESULT domelem_remove_qualified_item(xmlNodePtr node, BSTR name, BSTR ur
|
|||
|
||||
static HRESULT domelem_remove_named_item(xmlNodePtr node, BSTR name, IXMLDOMNode **item)
|
||||
{
|
||||
xmlChar *nameA, *local, *prefix;
|
||||
BSTR uriW, localW;
|
||||
xmlNsPtr ns;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", node, debugstr_w(name), item);
|
||||
return domelem_remove_qualified_item(node, name, NULL, item);
|
||||
|
||||
nameA = xmlchar_from_wchar(name);
|
||||
local = xmlSplitQName2(nameA, &prefix);
|
||||
heap_free(nameA);
|
||||
|
||||
if (!local)
|
||||
return domelem_remove_qualified_item(node, name, NULL, item);
|
||||
|
||||
ns = xmlSearchNs(node->doc, node, prefix);
|
||||
|
||||
xmlFree(prefix);
|
||||
|
||||
if (!ns)
|
||||
{
|
||||
xmlFree(local);
|
||||
if (item) *item = NULL;
|
||||
return item ? S_FALSE : E_INVALIDARG;
|
||||
}
|
||||
|
||||
uriW = bstr_from_xmlChar(ns->href);
|
||||
localW = bstr_from_xmlChar(local);
|
||||
xmlFree(local);
|
||||
|
||||
TRACE("removing qualified node %s, uri=%s\n", debugstr_w(localW), debugstr_w(uriW));
|
||||
|
||||
hr = domelem_remove_qualified_item(node, localW, uriW, item);
|
||||
|
||||
SysFreeString(localW);
|
||||
SysFreeString(uriW);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT domelem_get_item(const xmlNodePtr node, LONG index, IXMLDOMNode **item)
|
||||
|
|
|
@ -4164,18 +4164,18 @@ static void test_removeNamedItem(void)
|
|||
|
||||
removed_node = NULL;
|
||||
r = IXMLDOMNamedNodeMap_removeNamedItem( map, _bstr_("ns:b"), &removed_node );
|
||||
todo_wine EXPECT_HR(r, S_OK);
|
||||
if (removed_node) IXMLDOMNode_Release( removed_node );
|
||||
EXPECT_HR(r, S_OK);
|
||||
IXMLDOMNode_Release( removed_node );
|
||||
|
||||
removed_node = NULL;
|
||||
r = IXMLDOMNamedNodeMap_removeNamedItem( map, _bstr_("xml:lang"), &removed_node );
|
||||
todo_wine EXPECT_HR(r, S_OK);
|
||||
if (removed_node) IXMLDOMNode_Release( removed_node );
|
||||
EXPECT_HR(r, S_OK);
|
||||
IXMLDOMNode_Release( removed_node );
|
||||
|
||||
len = -1;
|
||||
r = IXMLDOMNamedNodeMap_get_length( map, &len );
|
||||
EXPECT_HR(r, S_OK);
|
||||
todo_wine ok( len == 2, "length %d\n", len );
|
||||
ok( len == 2, "length %d\n", len );
|
||||
|
||||
IXMLDOMNamedNodeMap_Release( map );
|
||||
IXMLDOMElement_Release( element );
|
||||
|
|
Loading…
Reference in New Issue