12

実際の iPhone では NSXML に制限があるため、TouchXml を使用しています。とにかく、私は Objective-C を使い始めたばかりで、C# のバックグラウンドを持っていて、何か新しいことを学びたいと思っていました..とにかく..ここに私の xml ファイルがあります...

<?xml version="1.0" encoding="utf-8"?>
<FundInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/webservices">
  <FundsReleaseDate>2009-02-11T00:00:00</FundsReleaseDate>
  <FundValue>7800</FundValue>
  <FundShares>1000</FundShares>
</FundInfo>

7800、つまり FundValue を取得しようとしています。誰かが私を正しい方向に向けることができますか?私は TouchXml CXMLDocument を使用しており、myParser は CXMLDocument タイプです。

NSArray *nodes = [myParser nodesForXPath:@"//FundInfo" error:&err];

基本的に、ノードは nil と評価されます

if ([nodes count] > 0 ) {
    amount = [nodes objectAtIndex:1];
}

更新 1: XPath を使用した解析を放棄し、それを NSURLRequest に置き換えたので、XML 全体が文字列になっていますが、Objective-C の失礼な紹介は続きます... .NET BCL では、Regex などを簡単に利用できます。

UPDATE2:正規表現に RegexKitLite を使用する方法を理解しました。

ここでの問題は、1 つの大きな文字列である FundValue 内から "7800" を取得するにはどうすればよいかということです。NSLogを使用して書き込むことで、NSStringにあることを確認しました。

4

3 に答える 3

0

同様の問題がありました。指定された名前空間 (xmlns="http://somenamespace") を持つ XML で ANY を選択すると、ノードが見つからないという結果になります。xmlns:somenamespace="http://somenamespace" などの追加の名前空間形式をサポートしていることを考えると、非常に奇妙です。

いずれにせよ、最も簡単な方法は文字列置換を実行し、xmlns="http://tempuri.org/webservices を空の文字列に置き換えることです。

全体的に私は touchxml を気に入っていますが、このバグがまだ存在しているとは信じられません。

于 2009-07-15T23:46:34.337 に答える