ok problem is solved. it seems it was related to using namespaces vs not using them. i am posting code so that other who need a fast way to setup xsd on xerces can simply copy without wasting time on the non existent documentation
------------------------ CODE -------------------------------------------- XercesDOMParser* parser = new XercesDOMParser(); parser->setValidationScheme(XercesDOMParser::Val_Always); parser->setValidationSchemaFullChecking(true); parser->setDoNamespaces(true); // this must be true, even if your using xsi:noNamespaceSchemaLocation parser->setDoSchema(true); ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase(); parser->setErrorHandler(errHandler); char* xmlFile = "test.xml"; try { parser->parse(xmlFile); DOMElement *domElement = parser->getDocument()->getElementById( XMLString::transcode("one")); cout<<XMLString::transcode(domElement->getNodeName())<<endl; ....... --------------- rules.xsd ------------------------------------------------------------ <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="AnElement"> <xsd:complexType> <xsd:attribute name="id" type="xsd:ID" use="required"/> </xsd:complexType> </xsd:element> </xsd:schema> ------------------- test.xml ---------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <Server xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="rules.xsd" > <AnElement id="one" > <data>dfdfd</data> <value>dfdfd</value> </AnElement> </Server>