ref: 47a288683dbdc55c5df9b9f65db9909de6021af0
dir: /libxml/xmlattr.c/
#include <u.h>
#include <libc.h>
#include "xml.h"
Attr *
xmlattr(Xml *xp, Attr **root, Elem *parent, char *name, char *value)
{
Attr *ap, *t;
char *s;
Ns *n;
if((ap = xmlcalloc(xp, sizeof(Attr), 1)) == nil)
sysfatal("no memory - %r\n");
if(*root == nil){
*root = ap;
}
else{
for (t = *root; t->next; t = t->next)
continue;
t->next = ap;
}
ap->parent = parent;
if (name) {
n = nil;
if (strncmp(name, "xmlns:", 6) == 0) {
n = xmlfindns(xp, name+6);
} else
if (strcmp(name, "xmlns") == 0) {
n = xmlfindns(xp, nil);
}
if (n && value)
n->decl = xmlstrdup(xp, value, 0);
}
if(name){
s = strchr(name, ':');
if (s) {
ap->ns = xmlfindns(xp, name);
s++;
} else
s = name;
if((ap->name = xmlstrdup(xp, s, 1)) == nil)
sysfatal("no memory - %r\n");
}
if(value)
if((ap->value = xmlstrdup(xp, value, 0)) == nil)
sysfatal("no memory - %r\n");
return ap;
}