Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
743 views
in Technique[技术] by (71.8m points)

iphone - CXMLDocument - [CXMLNode nodeForXPath] problem?

I'm developing epub reader program.

To get contents of the epub file, I wanted to parse container.xml.

Here it is.

<?xml version="1.0"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
    <rootfiles>
    <rootfile full-path="OPS/content.opf"
  media-type="application/oebps-package+xml"/>
</rootfiles>
</container>

I wanted to get element, so I used following code.

CXMLDocument* manifestFile = [[[CXMLDocument alloc] initWithContentsOfURL:[NSURL fileURLWithPath:manifestFilePath] options:0 error:nil] autorelease];

NSArray* nodes = [manifestFile nodesForXPath:@"//rootfiles" error:nil];
NSLog(@"Nodes count is %d
", [nodes count]);

And I get the following result.

Nodes count is 0

Why do I got this result?

Please help me.

Thanks.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The problem is that your XML has a namespace. You need to explicitly define the namespaces to use when querying with XPath.

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"urn:oasis:names:tc:opendocument:xmlns:container",
                      @"oasis", 
                      nil];

NSArray* nodes = [manifestFile nodesForXPath:@"//oasis:rootfiles" namespaceMappings:dict error:nil];

NSLog(@"Nodes count is %d
", [nodes count]); // --> Nodes count is 1

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...