1

私はここと新しい(Google)で見つけた例を試してみました。何も機能していないようです。

Webサイトへの呼び出し後に取得するXMLファイルがあります。

<?xml version="1.0" encoding="iso8859-1" ?>
<Database version="1.24" xmlns="http://1234.com">
  <Session>
    <Key>1234</Key>
    <Count>2424</Count>
    <SubExp>Sun Dec  1 00:00:00 2013</SubExp>
    <GMTime>Thu Feb  7 19:38:03 2013</GMTime>
    <Remark>cpu: 0.058s</Remark>
  </Session>
</Database>

OK私は次のようにXMLオブジェクトにロードしました:

var xml:XML = new XML(event.target.data);

これまでのところ、オブジェクトにはXMLデータが含まれています。

<Database version="1.24" xmlns="http://1234.com">
      <Session>
        <Key>1234</Key>
        <Count>2424</Count>
        <SubExp>Sun Dec  1 00:00:00 2013</SubExp>
        <GMTime>Thu Feb  7 19:38:03 2013</GMTime>
        <Remark>cpu: 0.058s</Remark>
      </Session>
    </Database>

今、私はセッションの下でキー値を読み取る必要があるので、私は試しました:

xml.Session.Key
xml.Session[0].Key
xml[0].Session.Key

それらのいくつかは空の文字列を返しますいくつかはデータがないいずれかの方法でエラーだけですか?

そのため、[式]ウィンドウで、何が起こるかを確認するためにxml[0][0]と入力しました。

キー値を返しますが、コードに配置すると

var key:String = xml[0][0];
trace(key):

トレースはXMLファイル全体を返しますか?だから私は何が欠けているのかわかりませんか?

4

2 に答える 2

3

問題は名前空間にあります。

これを試して:

var xml:XML = new XML(event.target.data);
var ns:Namespace = xml.namespace();
trace(xml.ns::Session.ns::Key);

また、これは悪い考えかもしれませんが、データが必要で名前空間を気にしない場合(またはそれらが私が行っていることに関連していない場合)、これらを取り除き、それらのないXMLオブジェクト:

public function stripNamespaces(xml:XML):XML {

    const DECLARATION_REG_EXP:RegExp = new RegExp("xmlns[^\"]*\"[^\"]*\"", "gi");

    var namespaceDeclarations:Array = xml.namespaceDeclarations();

    for (var i:int = 0; i < namespaceDeclarations.length; i++) {
        xml.removeNamespace(namespaceDeclarations[i]);
    }

    return new XML(xml.toString().replace(DECLARATION_REG_EXP, ""));        
}
于 2013-02-07T22:37:59.783 に答える
0

xmlには名前空間があるため、Flash/e4xにそれを使用するように指示する必要があります。

private var xml:XML =
    <Database version="1.24" xmlns="http://1234.com">
      <Session>
        <Key>1234</Key>
        <Count>2424</Count>
        <SubExp>Sun Dec  1 00:00:00 2013</SubExp>
        <GMTime>Thu Feb  7 19:38:03 2013</GMTime>
        <Remark>cpu: 0.058s</Remark>
      </Session>
    </Database>;

private function onCreationComplete():void
{
    namespace myNameSpace = "http://1234.com";
    use namespace myNameSpace;
    var value:String = xml.Session.Key;
    trace("value:", value); // outputs: value: 1234
}
于 2013-02-07T22:38:55.080 に答える