2

XPath を使用して XML ドキュメントを解析しようとしています。私の NSXMLElement の 1 つは、仮説的に言えば、次のようになります。

<foo bar="yummy">

属性 bar の値を取得しようとしていますが、コードを解釈すると bar="woo" が返されます。これは、woo と woo だけにアクセスするには、さらに文字列処理を行う必要があることを意味します。

基本的に私は次のようなことをしています

NSArray *nodes = [xmlDoc nodesForXPath:@"foo/@bar" error:&error];
xmlElement = [nodes objectAtIndex:0];

bar="yummy" ではなく、文字列を解析する手間を省くために、上記のコードを記述しておいしいものを与える方法はありますか?

ありがとう。


TouchXML が使用されていると仮定すると、同様の結果を得る方法はまだありますか? attribute="value" なしで、属性の値だけを取得する場合と同様に? その結果、さらに文字列を解析して値を取得する必要があります。

4

4 に答える 4

4

TouchXML API は、Apple の NSXML 実装の正確な複製であると想定されているため、すべての NS メソッドを C メソッドに置き換える以外は同じである必要があります。

TouxhXML クラスは、NSXML クラスに直接マップされます。NSXMLNode -> CXMLNodeNSXMLDocument -> CXMLDocumentNSXMLElement -> CXMLElement。明らかな理由から、NSXML クラスと TouchXML クラスを混在させることはできません。

TouxhXML メソッドは NSXML メソッドにも直接マップされますが、メソッドの小さなサブセットのみがサポートされています。定数名と列挙型名はほぼ同等です (CXML... vs NSXML...) が、定数値は同等ではありません

参照

通常の Apple クラスまたは TouchXML フレームワークのいずれかを使用すると、次のコードは例として文字列 "yummy" のみを提供します。

 NSArray *nodes = [xmlDoc nodesForXPath:@"./foo/@bar" error:&err];
 NSString *value = [[nodes objectAtIndex:0] stringValue];

幸運を、

ブライアン・G

于 2008-10-28T03:59:32.277 に答える
3

iPhone で NSXMLDocument クラスを使用しようとしている場合、このクラス (および関連する NSXMLNode、NSXMLElement などのクラス) は携帯電話では使用できないため、非常に失望することになります (それらはシミュレーターで使用できますが、これは混乱を招く可能性があります)。

電話で XML 解析を行うには、libxml2 を参照してください。これを行うための無料のフレームワークがいくつかあります (TouchXML が優れていると思います)。

そうは言っても、このコードを Mac で実行したい場合は、NSXMLElement メソッドを使用して、必要な-attributeForName:属性だけを引き出すことができます。

于 2008-10-28T00:52:06.180 に答える
2

Ben の言うとおりです。iPhone-SDK コードは NSXMLDocument でビルドされ、シミュレーターで実行されますが、デバイスではまったく機能しません。ドキュメントにはおそらくどこかで言及されていますが、かなりあいまいです。TouchXML は TouchCode の一部です。詳細については、こちらを参照してください

于 2008-10-28T01:59:09.117 に答える
0

iPhone は、小さな sax パーサーである NSXMLParser にアクセスできます。Aaron Hillegass は、NSXMLParser の使用に関する優れた記事を書いています。XPath はサポートしていませんが、xml をデータ オブジェクトにリッピングするのに非常に便利です。

Cocoa での XML の解析

于 2008-11-19T21:49:58.740 に答える