in reply to Re: XML::LibXML problem
in thread XML::LibXML problem

Hi, thanks for the reply. The problem is I want both elements and text nodes. But having said that, the bigger problem I am having is just geting a single child level of elements. This particular schema is literally dozens of levels deep but I only want the children under a particular element. So far, this query produces output (but all of the elements beneath the starting element) (I just want a single layer)
$query = $root->nodePath() . $extendPath . "[\@name]";
but this query
$query = "child::" . $root->nodePath() . $extendPath . "[\@name]";
produces an error of (please excuse the path - it is the schema, not me!) XPath error : Invalid expression child::/xs:schema/xs:element/xs:complexType/xs:sequence/xs:element/xs:complexType/xs:sequence/xs:element@name ^ at dump2.pl line 85 Any ideas? Regards, John

Replies are listed 'Best First'.
Re^3: XML::LibXML problem
by choroba (Cardinal) on Dec 29, 2011 at 14:27 UTC
    I do not get your exact problem. To get children elements of a particular parent element, just do
    $parent->findnodes("*")
    To get both elements and text nodes, do
    $parent->findnodes("* | text()")
    To get text nodes and elements containing text, do
    $parent->findnodes("*[text()] | text()")
    And so on.
      Yes that will work but I am looking for just the next level only not the whole tree. So for instance
      <library> <book attr1="zzz"> <title>xxxx</title> <author>yyyyy</author> </book> <book attr1="sssss"> ---- </book> <book attr1="dddd"> ---- </book> </library>
      So, if i was at library then I just want all of the books, no title or author elements. And if I do * then I get back all of the elements from the whole tree. Regards, John
        if I do * then I get back all of the elements from the whole tree
        Not true. Or at least I do not get it, and you should not get it either:
        perl -E ' use XML::LibXML; my $dom = XML::LibXML->load_xml(string => q{ <library> <book attr1="zzz"> <title>xxxx</title> <author>yyyyy</author> </book> <book attr1="sssss"> ---- </book> <book attr1="dddd"> ---- </book> </library> }); my ($l) = $dom->findnodes("/library"); say $_->getName for $l->findnodes("*[text()] | text()");' #text book #text book #text book #text