[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[xml] Validation problems with an XML without default namespace
- From: Samuel Díaz García <samueldg arcoscom com>
- To: xml gnome org
- Subject: [xml] Validation problems with an XML without default namespace
- Date: Thu, 29 Sep 2005 18:36:59 +0200
Dear guys, first sorry for my english, and second, the problem.
I have a plain XML in a memory buffer as:
<E1>
</E1>
Parsed in a xmlDocPtr without problems.
In the other hand I have a XSD file to validate the XML buffer and my
xmlSchemaValidCtxtPtr prepared for that XSD file.
The XSD defines a namespace not present in my plain XML and parsed x_doc
(xmlDocPtr type variable).
When I run (with error checks omited and tested all these lines executes
perfectly):
xmlDocPtr x_doc = xmlReadDoc(
BAD_CAST my_buffer_xml_ptr,
0, // Uri
my_encoding, // Encode
0 // Opciones
);
xmlSchemaParserCtxtPtr x_sh_parser_ctxt = xmlSchemaNewParserCtxt(
BAD_CAST "my path to the XSD file"
);
xmlSchemaPtr x_sh = xmlSchemaParse( x_sh_parser_ctxt );
xmlSchemaValidCtxtPtr x_sh_ctxt = xmlSchemaNewValidCtxt( x_sh );
I have in x_sh_ctxt my validation context and in x_doc my tree.
And, the real problem, the next line is:
int res = xmlSchemaValidateDoc(x_sh_ctxt, x_doc);
After this line, the validation works, but it says to me that a NS is
required. I tried this (before the xmlSchemaValidateDoc() call):
xmlNsPtr x_ns = 0;
xmlNsPtr x_ns2 = 0;
int kk;
xmlNodePtr x_raiz = xmlDocGetRootElement( x_doc );
x_ns = xmlNewNs( x_raiz, BAD_CAST "urn:hl7-org:v2xml", BAD_CAST "" );
if( x_ns ) {
xmlSetNs( x_raiz, x_ns );
}
x_ns2 = xmlNewNs( x_raiz, BAD_CAST "urn:hl7-org:v2xml", BAD_CAST "n" );
if( x_ns2 ) {
xmlSetNs( x_raiz, x_ns2 );
}
kk = xmlReconciliateNs( x_doc, x_raiz );
But now, appears only the root element has a namespace assigned and the
validation fails in first root element child, because it not found the
namespace.
The libxml2 library is not the last version, but before I upgrade the
version I want to know if I must use a function as:
void setElementNS(xmlNode * a_node,xmlNsPtr nameSpace)
{
xmlNode *cur_node = NULL;
for (cur_node = a_node; cur_node; cur_node =
cur_node->next) {
if (cur_node->type == XML_ELEMENT_NODE) {
cur_node->ns=nameSpace;
}
setElementNS(cur_node->children,nameSpace);
}
}
to assign "manually" the namespace to ALL elements, or there are an API
to do this task.
Any idea about this problem?
Thanks
--
Samuel Díaz García
Director Gerente
ArcosCom Wireless, S.L.L.
CIF: B11828068
c/ Romero Gago, 19
Arcos de la Frontera
11630 - Cadiz
http://www.arcoscom.com
mailto:samueldg arcoscom com
msn: samueldg arcoscom com
Móvil: 651 93 72 48
Tlfn.: 956 70 13 15
Fax: 956 70 34 83
begin:vcard
fn;quoted-printable:Samuel D=C3=ADaz Garc=C3=ADa
n;quoted-printable:D=C3=ADaz Garc=C3=ADa;Samuel
org:ArcosCom Wireless, S.L.L.;I+D+I
adr;quoted-printable;quoted-printable:;;c/ Romero Gago, 19;Arcos de la Frontera;C=C3=A1diz;11630;Espa=C3=B1a
email;internet:samueldg arcoscom com
title:Director Gerente
tel;work:956 70 13 15
tel;fax:956 70 34 83
tel;cell:651 937 248
x-mozilla-html:FALSE
url:http://www.arcoscom.com
version:2.1
end:vcard
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]