Filter out CTEXT nodes when building element child lists.
get_item and get_length should honour the filter. Add some '\n's to the tests so that libxml2 lists CTEXT nodes.
This commit is contained in:
parent
cd1b13fb7d
commit
3d0c66277a
|
@ -319,7 +319,22 @@ static HRESULT WINAPI xmlnode_get_childNodes(
|
|||
|
||||
if ( !childList )
|
||||
return E_INVALIDARG;
|
||||
*childList = create_nodelist( This->node->children );
|
||||
|
||||
switch(This->node->type)
|
||||
{
|
||||
case XML_ELEMENT_NODE:
|
||||
*childList = create_filtered_nodelist( This->node->children, (const xmlChar *)"*" );
|
||||
break;
|
||||
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
*childList = create_filtered_nodelist( This->node->children, (const xmlChar *)"node()" );
|
||||
break;
|
||||
|
||||
default:
|
||||
FIXME("unhandled node type %d\n", This->node->type);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!*childList)
|
||||
return S_FALSE;
|
||||
return S_OK;
|
||||
|
|
|
@ -254,6 +254,7 @@ static HRESULT WINAPI xmlnodelist_get_item(
|
|||
xmlnodelist *This = impl_from_IXMLDOMNodeList( iface );
|
||||
xmlNodePtr curr;
|
||||
long nodeIndex = 0;
|
||||
HRESULT r;
|
||||
|
||||
TRACE("%p %ld\n", This, index);
|
||||
|
||||
|
@ -264,12 +265,14 @@ static HRESULT WINAPI xmlnodelist_get_item(
|
|||
|
||||
curr = This->node;
|
||||
|
||||
for (nodeIndex = 0; nodeIndex < index; nodeIndex++) {
|
||||
if (curr->next == NULL)
|
||||
return S_FALSE;
|
||||
else
|
||||
while(curr)
|
||||
{
|
||||
r = xslt_next_match( &This->xinfo, &curr );
|
||||
if(FAILED(r) || !curr) return S_FALSE;
|
||||
if(nodeIndex++ == index) break;
|
||||
curr = curr->next;
|
||||
}
|
||||
if(!curr) return S_FALSE;
|
||||
|
||||
*listItem = create_node( curr );
|
||||
|
||||
|
@ -283,6 +286,7 @@ static HRESULT WINAPI xmlnodelist_get_length(
|
|||
|
||||
xmlNodePtr curr;
|
||||
long nodeCount = 0;
|
||||
HRESULT r;
|
||||
|
||||
xmlnodelist *This = impl_from_IXMLDOMNodeList( iface );
|
||||
|
||||
|
@ -293,12 +297,13 @@ static HRESULT WINAPI xmlnodelist_get_length(
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
curr = This->node;
|
||||
nodeCount = 1;
|
||||
while (curr->next != NULL) {
|
||||
for(curr = This->node; curr; curr = curr->next)
|
||||
{
|
||||
r = xslt_next_match( &This->xinfo, &curr );
|
||||
if(FAILED(r) || !curr) break;
|
||||
nodeCount++;
|
||||
curr = curr->next;
|
||||
}
|
||||
|
||||
*listLength = nodeCount;
|
||||
return S_OK;
|
||||
}
|
||||
|
|
|
@ -50,15 +50,15 @@ static const WCHAR szComplete3[] = {
|
|||
'<','a','>','<','/','a','>','\n',0
|
||||
};
|
||||
static const WCHAR szComplete4[] = {
|
||||
'<','?','x','m','l',' ',
|
||||
'v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>',
|
||||
'<','l','c',' ','d','l','=','\'','s','t','r','1','\'','>',
|
||||
'<','b','s',' ','v','r','=','\'','s','t','r','2','\'',' ',
|
||||
's','z','=','\'','1','2','3','4','\'','>','f','n','1','.','t','x','t','<','/','b','s','>',
|
||||
'<','p','r',' ','i','d','=','\'','s','t','r','3','\'',' ',
|
||||
'v','r','=','\'','1','.','2','.','3','\'',' ',
|
||||
'p','n','=','\'','w','i','n','e',' ','2','0','0','5','0','8','0','4','\'','>',
|
||||
'f','n','2','.','t','x','t','<','/','p','r','>',
|
||||
'<','?','x','m','l',' ','v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>','\n',
|
||||
'<','l','c',' ','d','l','=','\'','s','t','r','1','\'','>','\n',
|
||||
'<','b','s',' ','v','r','=','\'','s','t','r','2','\'',' ','s','z','=','\'','1','2','3','4','\'','>',
|
||||
'f','n','1','.','t','x','t','\n',
|
||||
'<','/','b','s','>','\n',
|
||||
'<','p','r',' ','i','d','=','\'','s','t','r','3','\'',' ','v','r','=','\'','1','.','2','.','3','\'',' ',
|
||||
'p','n','=','\'','w','i','n','e',' ','2','0','0','5','0','8','0','4','\'','>','\n',
|
||||
'f','n','2','.','t','x','t','\n',
|
||||
'<','/','p','r','>','\n',
|
||||
'<','/','l','c','>','\n',0
|
||||
};
|
||||
static const WCHAR szNonExistentFile[] = {
|
||||
|
@ -439,6 +439,10 @@ void test_domnode( void )
|
|||
|
||||
if (list)
|
||||
{
|
||||
r = IXMLDOMNodeList_get_length( list, &count );
|
||||
ok( r == S_OK, "get_length returns %08lx\n", r );
|
||||
ok( count == 2, "get_length got %ld\n", count );
|
||||
|
||||
r = IXMLDOMNodeList_nextNode( list, &node );
|
||||
ok( r == S_OK, "nextNode returned wrong code\n");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue