0

次の「 object」ノードのうち、linkurl属性内に URL が含まれているものを見つけようとしています。linkurl 属性は、属性内にコンテンツがない場合でも常に存在します。最初のオブジェクト ノードの linkurl の最初のインスタンスが空であるかどうかを判断し、2 番目、3 番目などに移動する方法が見つからないため、運がありません。属性自体にコンテンツはありません。

これはxmlです

<object id='graphic1' active='1' url='media/00360691.swf' x='445' y='125' alt='' altfr='' altes='' tabIndex='1' layer='0' linkurl=''/>
<object id='graphic2' active='0' url='media/00360691.swf' x='0' y='0' alt='' altfr='' altes='' tabIndex='1' layer='0' linkurl='html/AnalyticalReviewAnalysis.pdf'/>
<object id='graphic3' active='0' url='media/00360692.swf' x='0' y='0' alt='' altfr='' altes='' tabIndex='1' layer='0' linkurl=''/>
<object id='graphic4' active='0' url='media/00360693.swf' x='0' y='0' alt='' altfr='' altes='' tabIndex='1' layer='0' linkurl=''/>
<object id='graphic5' active='0' url='media/' x='0' y='0' alt='' altfr='' altes='' tabIndex='1' layer='0' linkurl=''/>
<object id='activity' active='0' url='media/' x='0' y='0'/>

これは私がこれまでに試したことです:

if(myXML.object[7].hasOwnProperty("@linkurl")){
        trace("graphic 1 is not empty");
        linkURL = myXML.object[7].attribute("linkurl")[0];
} else {
        trace("graphic 1 is empty");
}

    trace("length: "+myXML.object[7].attribute("linkurl")[0].length());
    trace(myXML.object[7].attribute("linkurl")[0]);

    trace("linkURL: "+ linkURL);

これはトレースです:

graphic 1 is not empty
length: 1

linkURL: 

属性にコンテンツが含まれているかどうかに関係なく、長さは常に 1 です。したがって、空のノードを無視して次のノードに進む方法はありません。if ステートメントは常に空ではありません。 iflinkurl=""であっても、まだ何かがあるからです。

4

2 に答える 2

1

これを試して:

if ( myXML.object[7].@linkurl && myXML.object[7].@linkurl != '' ) {
    // linkurl contains data
}
else {
    // linkurl is empty
}

基本的に、linkurl プロパティが実際に存在することを確認し (これは null 参照を回避するための良い方法です)、文字列が空の文字列ではないかどうかを確認します。そうであれば、AS3 の linkurl プロパティを設定できます。それ以外の場合は、無視します。

于 2013-04-12T17:27:10.997 に答える
1

長さ 1 は正しいです。xml オブジェクトには linkurl 属性が 1 つあります。

値として空の文字列を持つ属性は、依然として属性です

長さをゼロにするには、xml にlinkurl=''を含めないでください。

于 2013-04-12T17:21:29.263 に答える