質問

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" ではなく yummy を提供するだけの上記のコードを記述することはできますか?

ありがとう。


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

役に立ちましたか?

解決

TouchXML API は Apple の NSXML 実装を正確に複製したものであるはずなので、すべての NS メソッドを C メソッドに置き換える点を除けば同じであるはずです。

TouxhXML クラスは NSXML クラスに直接マッピングされます。 NSXMLノード -> CXMLノード, NSXMLドキュメント -> CXMLドキュメント, NSXML要素 -> CXML要素. 。明らかな理由により、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

他のヒント

NSXMLDocumentクラスをiPhoneで使用しようとすると、このクラス(および関連するNSXMLNode、NSXMLElementなどのクラス)が電話で利用できないため、非常にがっかりするでしょう(これらは紛らわしいシミュレーター)。

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

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

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

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

CocoaでのXMLの解析

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top