EDITx2:以下の問題は、XMLスキーマに関連する属性が原因であると思われます。これは、主にFB 4.7でXMLを検証できるようにするために使用しており、XMLがアプリ自体に埋め込まれると実際には必要ありません。
私のXMLドキュメントと同じXMLオブジェクトを作成しますが、xmlns、xmlns:xsi、およびxsi:schemalocation属性を省略すると、AS内のXMLオブジェクトを適切にナビゲートできます。それらを含めると、以下の問題が発生するだけでなく、xmlns属性とxmlns:xsi属性がツリーに引き継がれ、元のXMLオブジェクトのXMLListベースのサブセットを同様に分析することが困難になります。以下のコード例は、現象を示すために更新されています。
問題は次のようになります。XMLを何らかの方法で埋め込んだときにスキーマ関連の属性を削除することはできますか、それともASに適したものにすることができますか?
編集:私が経験している問題は、埋め込まれたXMLドキュメントに特に関連しているようです。AS3で直接作成されたXML変数は、通常どおりトラバースできます。
AS3で一見無意味な問題が発生しています。次のようなexample.xmlというXMLドキュメントを想定します。
<?xml version="1.0" encoding="UTF-8"?>
<myParent xmlns="http://www.example.com/Schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/Schema Schema.xsd">
<myChild id="1">
<myGrandchild cid="1" />
<myGrandchild cid="2" />
</myChild>
<myChild id="2">
<myGrandchild cid="3" />
</myChild>
</myParent>
次に、次のように、埋め込みを介してAS3の静的定数(ネイティブクラスの外部からアクセスできるようにするため)に割り当てようとします。
[Embed(source="example.xml", mimeType="application/octet-stream")]
private static const exampleXML:Class;
public static const myXML:XML = XML(new exampleXML);
次に、XMLListを使用してこれから要素/ノードを抽出します。これが私が遭遇しているものです。これが私が期待するように機能する2つの例であり、その後に機能しない3つの例が続きます。
// #1
var myList:XMLList = myXML.*;
trace(myList);
/*
<myChild id="1" xmlns="http://www.example.com/Schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<myGrandchild cid="1" />
<myGrandchild cid="2" />
</myChild>
<myChild id="2" xmlns="http://www.example.com/Schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<myGrandchild cid="3" />
</myChild>
*/
// #2
var myList:XMLList = myXML.*.(@id==1);
trace(myList);
/*
<myChild id="1" xmlns="http://www.example.com/Schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<myGrandchild cid="1" />
<myGrandchild cid="2" />
</myChild>
*/
// #3
var myList:XMLList = myXML.myChild;
trace(myList);
/*
(Outputs nothing at all)
*/
// #4
var myList:XML = myXML.myChild[0];
trace(myList);
/*
null
*/
// #5
var myList:XMLList = myXML.child("myChild");
trace(myList);
/*
(Outputs nothing at all)
*/
理論的には、#3と#5は#1と同じ出力を提供する必要があり、#4は#2と同じ出力を提供する必要があります。なぜ3-5が空白になるのですか?myXMLを静的または定数として宣言することに問題はありますか?私は何が間違っているのですか?
ここでは、明らかに非常に一般的な例を使用しています。私が使用している実際のXMLは、XSDスキーマに関連付けられています。それが私の問題に影響を与える可能性がある場合は、私に知らせてください。実際のコードを投稿します。