1

xpathとGDataXMLを使用してXMLを解析するのに問題があります。xpathテスターを使用すると、文字列は機能するはずですが、名前空間に追加すると機能が妨げられると思います。

XML:

<?xml version="1.0" encoding="utf-8"?>

<Autodiscover xmlns='http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006'>
          <Response xmlns='http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a'>
        <Account>
        <Protocol>
                <Type>EXPR</Type>
                <EwsUrl>https://server.my.dom/EWS/Exchange.asmx</EwsUrl>
        </Protocol>
        </Account>
      </Response>
</Autodiscover>

それを解析する私の試みは次のとおりです。

NSDictionary *namespaceMappings = [NSDictionary dictionaryWithObjectsAndKeys:@"http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a", @"response", nil];

    NSArray *idList = [doc nodesForXPath:@"//response:Protocol[Type='EXPR']/EwsUrl" namespaces:namespaceMappings error:nil];

また、次の名前空間を省略してみました。

NSArray *idList = [doc nodesForXPath:@"//Protocol[Type='EXPR']/EwsUrl" error:nil];

どちらのシナリオでも、idListのメンバーは0です。何かがくっつくかどうかを確認するために、今は壁に物を投げつけているような気がします。誰かが私に道を教えてもらえますか?

ありがとう!

4

2 に答える 2

3

マーティンの答えは正しいですが、私は(私のように)最初の読書でそれを逃した人たちのために理由を説明したいと思いました。

名前空間マッピングを設定するときは、名前空間にキーを指定し、XPath式のセレクターの前にそのキーの後にコロン(:)を付けます。このソリューションは、きちんとしたTouchXMLライブラリのCXMLDocumentsとCXMLElementsを使用します。

簡単な例から始めるために、XMLが次のようになっているとします。

<books xmlns="http://what.com/ever">
  <book>
    <title>Life of Pi</title>
  </book>
  <book>
    <title>Crime and Punishment</book>
  </book
</books>

次のすべての本を選択します。

// So, assuming you've already got the data for the XML document
CXMLDocument* xmldoc = [[CXMLDocument alloc] initWithData:xmlDocData options:0 error:nil];
NSDictionary *namespaceMappings = [NSDictionary dictionaryWithObjectsAndKeys:@"http://what.com/ever", @"nskey", nil];
NSError *error = nil;
NSArray *bookElements = [xmldoc nodesForXPath:@"/nskey:books/nskey:book" namespaceMappings:mappings error:&error];

名前空間が宣言されている要素だけでなく、すべての要素にプレフィックスを付ける必要があることに注意してください。

于 2013-02-14T11:26:26.417 に答える
2

XPathに関しては、が必要//response:Protocol[response:Type='EXPR']/response:EwsUrlです。私はobjective-cのものを手伝うことはできません。

于 2012-04-13T10:13:04.057 に答える