Переопределено имя атрибута ошибки синтаксического анализа xml - PullRequest
0 голосов
/ 14 августа 2011

В моей программе portscanner я хочу успешно записать вывод номера порта, отсканированного и имя сервиса. поэтому для каждого номера порта, scanbyby и имени службы я вызываю процедуру parseall ниже.

void parseall(int pid, char *scannedby, char *service){  // routine to add port, scannedby and service to xmlfile

  xmlDocPtr doc;  // pointer to parse xml Document

  xmlNodePtr cur = NULL;// node pointer. It interacts with individual node

  xmlAttrPtr attr; char portid[10];

  sprintf (portid,"%d",pid);  // converted int to string

  doc = xmlParseFile(xmlFileName); //parse filename

  cur = xmlDocGetRootElement(doc);   // get rootnode

  addnewportinfotag(cur,doc);  // this routine adds new portid, scannedby and servicename tags to the xmlfile created

  cur = cur->xmlChildrenNode;  //get pointer

  parseport(doc, cur, portid);  // routine to add port to xmlfile

while(cur!=NULL){

if ((!xmlStrcmp(cur->name, (const xmlChar *)"ports"))){

parsehost(doc, cur, scannedby);  // routine to add scanned by to xmlfile

parseservice(doc, cur, service); //routine to add servicename to xmlfile
}

cur = cur->next;

}

xmlSaveFormatFile (xmlFileName, doc, 1);

return;

xmlFreeDoc(doc);

}

код успешно компилируется, но когда я сканирую более одного порта, он выдает «xml parse error attribute name» переопределено "как показано ниже:

     [ Port  ] [ Scanned by] [ Status ] [Service]
     79/tcp     osus          Open      finger
     80/tcp       bt          Open        www
    111/tcp     osus          Open      sunrpc

xmloutput.xml:5: parser error : Attribute portid redefined
<ports protocol="tcp" portid="79" portid="80"><state state="open" reason="vanill
                                             ^
xmloutput.xml:5: parser error : Attribute scannedby redefined
e state="open" reason="vanilla-scan"/><scannedby scannedby="osus" scannedby="bt"
                                                                               ^
xmloutput.xml:5: parser error : Attribute name redefined
"/><scannedby scannedby="osus" scannedby="bt"/><service name="finger" name="www"
                                                                               ^
Segmentation fault

для одного порта это работает хорошо, давая:

<ports protocol="tcp" portid="22"><state state="open" reason="vanilla-scan"/><scannedby scannedby="bt"/><service name="ftp"/></ports></DPScanner>

1 Ответ

4 голосов
/ 14 августа 2011

Вы создаете недопустимый XML. В одном теге не может быть двух атрибутов с одинаковым именем.

См. Спецификации в Начальных тегах, Конечных тегах и Тегах пустых элементов :

Ограничение правильной формы: Уникальная спецификация спецификации

Имя атрибута не должно появляться более одного раза в одном и том же начальном теге или теге пустого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...