Search code examples
iphoneiosxpathxml-parsinggdata

GDataXMLDocument nodesForXPath return an error


I need your help, i want to parse an XML file using GDataXMLDocument and i want to fetch particular tag's all attributes but when i am using or just provide me the XPath's value to get columnHeading value

GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[NSData dataWithContentsOfFile:path] encoding:NSUTF8StringEncoding  error:NULL];

NSArray *tempArray = [doc nodesForXPath:@"//root/xsd:schema" namespaces:nil error:nil];

it returns below error.

XPath error : Undefined namespace prefix xmlXPathEval: evaluation failed

And here is my XML content.

<?xml version="1.0" encoding="utf-8"?>
<SH xmlns="urn:schemas-microsoft-com:xml-analysis:rowset">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:saw-sql="urn:saw-sql" targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset">
    <xsd:complexType name="R">
        <xsd:sequence>
            <xsd:element name="S0" saw-sql:columnHeading="SID" saw-sql:columnID="0"/>
            <xsd:element name="S1" saw-sql:columnHeading="SNAME" saw-sql:columnID="1"/>
            <xsd:element name="S2" saw-sql:columnHeading="CLASS" saw-sql:columnID="2"/>
            <xsd:element name="S3" saw-sql:columnHeading="ADD" saw-sql:columnID="3"/>
            <xsd:element name="S4" saw-sql:columnHeading="CITY" saw-sql:columnID="4"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

Stuck here from last 3 days. need your help.

Thanks in advance.


Solution

  • Finally i got the solution related to my question... and here is the answer for that.

    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[NSData dataWithContentsOfFile:path] encoding:NSUTF8StringEncoding error:NULL];

    NSDictionary *myNS = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"urn:schemas-microsoft-com:xml-analysis:rowset", @"xmlns",
                          @"http://www.w3.org/2001/XMLSchema", @"xsd",
                          @"urn:saw-sql",@"saw-sql", nil];
    
     NSArray *tempArray = [doc nodesForXPath:@"//xmlns:RS/xsd:schema/xsd:complexType/xsd:sequence/xsd:element" namespaces:myNS error:nil];
    
    NSMutableArray *keyArray = [[NSMutableArray alloc]initWithCapacity:0];
    
    for(GDataXMLElement *columns in tempArray)
    {
        GDataXMLNode *xmlElement = [columns attributeForName:@"saw-sql:columnHeading"];
    
        //  GDataXMLNode* xmlElement = [[[element2 elementsForName:@"xsd:element"]objectAtIndex:0]attributeForName:@"saw-sql:columnHeading"];
        [keyArray addObject:xmlElement.stringValue];
        //  NSLog(@"%@",xmlElement.stringValue);
    
    }