0

大きな XML ファイルを取得していますが、その構造を制御できません。

カスタム関数を使用してタグ名を使用し、ツリー構造をフレックス ツリーとして表示しましたが、その後壊れてしまいました。選択したノードから属性値を呼び出す他の関数と関係があると思います。

コードを参照してください。

<mx:Tree x="254" y="21" width="498" height="579" id="xmllisttree"       labelFunction="namer" dataProvider="{treeData}" showRoot="false"  change="treeChanged(event)" />

//and the Cdata

import mx.rpc.events.ResultEvent; 
[Bindable] private var fullXML:XMLList;  
private function contentHandler(evt:ResultEvent):void{  
    fullXML = evt.result.page;  
}  

[Bindable]
public var selectedNode:Object;

public function treeChanged(event:Event):void {
selectedNode=Tree(event.target).selectedItem;
}

 public function namer(item:Object):String {
        var node:XML = XML(item);
        var nodeName:QName = node.name();
        var stringtest:String ="bunny";
            return nodeName.localName;
        }

エラーは TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。

null 参照はどこにありますか?

4

3 に答える 3

1

わかった。XML は次のようになります。

<root>
  <test>
    <child>leaf 1</child>
  </test>
  <test2>
    <child2>leaf 2</child2>
  </test2>
</root>

これの重要な部分は、child および child2 タグ内に単純なコンテンツがあることです。ツリーを展開して「リーフ 1」または「リーフ 2」を表示すると、エラーが発生します。これは、node.name() が null を返すためです。'leaf 1' と 'leaf 2' はテキスト ノードであり、ノード名がないため、これは理にかなっています。

この問題を解決するには、次の行に沿って namer 関数を更新します。

public function namer(item:Object):String {
    var node:XML = XML(item);
    var nodeName:QName = node.name();
    if (nodeName) {
        return nodeName.localName;
    } else {
        return String(node);
    }
}

これにより、ツリー内の対応するノードのラベルとして「リーフ 1」と「リーフ 2」が使用されます。

于 2009-02-05T18:01:28.223 に答える
0

Flex と私の他の質問に答えてくれた人 (Herreman) によると、 localname をプロパティとして呼び出すのが正しい方法です。

fullXML とその stringtest 行はアーティファクトです。同じファイル atm に XML が埋め込まれています。

リーフ ノードを描画しようとすると、nodeName.localName が返されると失敗します。だから私はそれが何かと関係があることを知っています:

return nodeName.localName;

public function treeChanged(event:Event):void {
selectedNode=Tree(event.target).selectedItem;
}
于 2009-02-02T19:05:27.507 に答える
0

これをフレックスビルダーまたはEclipseでデバッグしようとしましたか?

null 参照エラーの最も可能性の高い候補は、namer() に渡された 'item' 引数です。ツリー コンポーネントは文字列を labelFuntion メソッドに渡しますが、xml オブジェクトに変換できる文字列ではない場合があります。私は間違いなく最初にそれを確認します。

私が見ることができるもう1つの間違いは、localNameがプロパティであるかのようにアクセスしていることです。実際にはメソッドなので、nodeName.localName() で呼び出す必要があります。 編集... nodeName が QName 型であることに気づかなかったため、これは正しくありません。localName は、実際にはこのタイプのプロパティです。お詫び

編集: Tree コンポーネントにも dataProvider があります

dataProvider="{treeData}"

あなたが与えた例から、treeDataが存在するようには見えません。それはfullXMLであるべきですか?

于 2009-02-02T18:40:30.520 に答える