質問

私は、実際のiPhone上の理由NSXMLの与えられた制限のTouchXmlを使用しています。とにかく、私はちょうど私がC#の背景から来て、

... ..ここに私のxmlファイルがあるnew..anyhow何かを学ぶように感じた、Objective-Cので出始めています
<?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];

基本的

ゼロに評価ノード
if ([nodes count] > 0 ) {
    amount = [nodes objectAtIndex:1];
}

UPDATE 1:私は、XPathを使用して解析を放棄した、とNSURLRequestでそれを交換したので、今、私は、文字列全体のXMLを持っていますが、客観-Cに私の失礼な導入が...私はちょうど私が持っているどのように甘やかされて育っ実現し続け正規表現のようなものはそう簡単に利用可能な.NETのBCLになります。

アップデート2:私は正規表現のためのRegexKitLiteを使用する方法を考え出しました。

質問だから、今、どのように私は今、一つの大きな文字列であるFundValue内部から「7800」を入手できます。私はのNSLogを使用して、それを書き込むことによって、私のNSStringの中でそれを持って確認しています。

役に立ちましたか?

解決

問題は、あなたのXMLが実際に一致していない、あなたのXPathを意味し、名前空間を持っていることです。残念ながら、デフォルトのマッピングが存在しない、とXPathは、実際には内部的にこれを処理するための良い方法を定義していないので、あなたは、XPathを変更するだけで、それを修正することはできません。代わりに、あなたはあなたのXPathでそれをマップする方法をインタプリタに通知する必要があります。

TouchXMLを経て、このためのサポートを実装していますように見えます:

- (NSArray *)nodesForXPath:(NSString *)xpath namespaceMappings:(NSDictionary *)inNamespaceMappings error:(NSError **)error;

だからあなたのような何かを試すことができます

NSDictionary *mappings = [NSDictionary dictionaryWithObject:@"http://tempuri.org/webservices" forKey:@"tempuri"];
[myParser nodesForXPath:@"//tempuri:FundInfo" namespaceMappings:mappings error:&err];

他のヒント

私は同様の問題がありました。指定された名前空間(のxmlns =「のhttp:// somenamespace」)を有するXML上の任意の選択が見つかりませんノードになります。 somenamespaceは=「のhttp:// somenamespace」非常に奇妙なことは、このようなのxmlnsなどの追加の名前空間のフォーマットをサポートしていない考慮。

いずれの場合においても、することにより、のはるかの一番簡単な方法は、空の文字列とのxmlns = "http://tempuri.org/webservicesを文字列に置き換え、置き換えんです。

全体的に私はtouchxmlが好き、私はこのバグがまだ存在すると信じていないことができます。

試してみてください。

NSArray *nodes = [myParser nodesForXPath:@"/FundInfo/*" error:&err];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top