Suchak Jani
Suchak Jani

Reputation: 157

libxml2 - xmlTextReaderPreservePattern - centos5 - libxml2-2.9.1 - gcc

Trying to used "xmlTextReaderPreservePattern".

It does not work when i have namespace qualifiers in the xpath. I get seg faults.

I do have a need for multiple namespaces within the same xml.

Any ideas ?

const char *pattern = "/wrapper:TestMessage/wrapper:Header/head:Frame/head:Id/head:StoreId/head:SysId/head:UserId"; // does not give seg fault
//const char *pattern = "/TestMessage/Header/Frame/Id/StoreId/SysId/UserId"; //does give seg fault
const char *namespace = "xmlns='urn:wrapper' xmlns:head='urn:std:header:tech:xsd:headeVersion.001.001.01' xmlns:message='urn:std:message:tech:xsd:messageVersion.001.001.01' "; // ddoes not give seg fault
//const char *pattern = "test"; // does not give seg fault
//const char *namespace = "test"; // does not give seg fault

if (xmlTextReaderPreservePattern(reader, (const xmlChar *) pattern, (const xmlChar **) &namespace) < 0) {
    fprintf(stderr, "%s : failed add preserve pattern %s\n",   XMLFileName, (const char *) pattern);
}

Upvotes: 1

Views: 243

Answers (1)

Suchak Jani
Suchak Jani

Reputation: 157

This works

const char *namespace[] = {"urn:wrapper", "wrapper", "urn:std:header:tech:xsd:headeVersion.001.001.01", "head", "urn:std:message:tech:xsd:messageVersion.001.001.01", "message"};

What does not work is xpath with functions like text(), for example.

onst char *pattern = "/wrapper:TestMessage/wrapper:Header/head:Frame/head:Id/head:StoreId/head:SysId/head:UserId/text()";

Upvotes: 2

Related Questions