2013-06-21 30 views
2

我需要你們的幫助,我想分析使用GDataXMLDocument一個XML文件,我想獲取特定標籤的所有屬性,但是當我使用或只是給我提供了XPath的價值得到columnHeading值GDataXMLDocument nodesForXPath返回一個錯誤

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

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

它返回低於錯誤。

的XPath錯誤:未定義命名空間前綴 xmlXPathEval:評估失敗

這裏是我的XML內容。

<?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> 

從過去三天困在這裏。需要你的幫助。

在此先感謝。

+0

請提供您的xml以瞭解您的要求。如果你正在嘗試獲取屬性,爲什麼你要使用節點? – Anupdas

+0

hello anupdas,我用xml內容更新了我的問題,現在我想要saw-sql:columnHeading的值如SID,SNAME ... – Apple

回答

3

最後我得到了與我的問題相關的解決方案......這裏是答案。 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); 

}