On Sat, Jan 2, 2010 at 6:39 PM, Andreas Wagner <[email protected]>wrote:

> Hi folks,
>
> i have an xml document like this:
>
> <?xml version="1.0" ...?>
> <root xmlns:Value="http://dummies.org";>
>    <header>
>        <variables>
>            <...../>
>            <...../>
>        </variables>
>        <const>
>             <.../>
>             <.../>
>        </const>
>        <parameters>
>             <param name="xxx">
>                  <Value:scalar name="xxx" type="BOOL"/>
>             </param>
>             <param name="yyy">
>                  <Value:scalar name="yyy" type="BOOL"/>
>             </param>
>        </parameters>
>    </header>
>    <body>
>    </body>
> </root>
>
> I can read the variables and the constants in the header, but when i want
> to read the Value:scalar name and type i get nothing. I read the correct
> lines, but the content is empty (thats normal) but the name of this element
> is "text".
> When the current node is param i try to get the values with:
>
> xmlChar *name;
> cur = cur->xmlChildrenNode;
> if (xmlGetNsProp(cur,(const xmlChar*) "name", (const xmlChar*) "Value"){
>     name = xmlGetNsProp(cur,(const xmlChar*) "name", (const xmlChar*)
> "Value");
>     printf("name: %s \n,name);
> }
>
The second parameter of xmlGetNsProp has to be the URI of the namespace and
not the prefix. Use this instead:
xmlGetNsProp(cur,(const xmlChar*) "name", (const xmlChar*) "
http://dummies.org";);

Prefixes in namespaces are arbitrary and not always available (i.e. xmlns="
http://dummies.org"; has no prefix yet has a namespace). The only way for
matching nodes within the same namespace is to compare the URI. It can be a
bit confusing sometimes :)

-- 
Emmanuel Rodriguez
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to