为什么E4X已被弃用并从某些浏览器中删除?
警告:E4X是obselete.默认情况下,它在Firefox 17中被禁用,并在Firefox 21中被完全删除.请使用DOMParser/DOMSerializer或非本机JXON算法.
https://developer.mozilla.org/en-US/docs/Archive/Web/E4X/Processing_XML_with_E4X
我想学习如何在E4X中使用命名空间处理XML,所以基本上这就是我想要学习的内容,比如我有一些像这样的XML:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/">
<rdf:item value="5"/>
<item value="10"/>
</rdf:RDF>
Run Code Online (Sandbox Code Playgroud)
我如何分配<rdf:item/>一个名为rdfItems<item/>的var 和一个名为regItems的var ?
谢谢!
考虑这个带有"节点"的XML片段,它可以具有无限子级别的"子节点"元素.
我想找到@type的属性,node对于任何给定subnode的基础上,它的@id属性.例如,如果我的id为9,那么我想从上面返回type ="foo".
<xml>
<node type="bar">
<subnode id="4">
<subnode id="5"/>
</subnode>
<subnode id="6"/>
</node>
<node type="foo">
<subnode id="7">
<subnode id="8">
<subnode id="9"/>
</subnode>
</subnode>
<subnode id="10"/>
</node>
</xml>
Run Code Online (Sandbox Code Playgroud)
我想出了E4X,但失败的是:
xml.node.(subnode.(@id == '8')).@type
Run Code Online (Sandbox Code Playgroud)
我可以理解为什么它不起作用.更有意义的是以下但语法失败(在AS3中):
xml.node.(..subnode.(@id == '8')).@type
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
如果我在Flex中有一个XMLList对象,检查列表是否为空的正确方法是什么?我应该只是比较结果myList.length() > 0,myList.toString() != ""还是尝试另一种方法?
我的Flex4(AIR)项目中有以下XML,用于定义菜单界面的开头:
<mx:MenuBar x="0" y="0" width="100%" id="myMenuBar" labelField="@label" itemClick="menuChange(event)">
<mx:dataProvider>
<s:XMLListCollection>
<fx:XMLList xmlns="">
<menu label="File">
<item label="New"/>
<item label="Load"/>
<item label="Save" enabled="false"/>
</menu>
<menu label="Help">
<item label="About"/>
</menu>
</fx:XMLList>
</s:XMLListCollection>
</mx:dataProvider>
</mx:MenuBar>
Run Code Online (Sandbox Code Playgroud)
我试图找到一个语法,让我在单击"加载"加载文件后将保存按钮设置为enabled = true,但是我无法弄清楚语法,有人可以提出建议.
目前检测按钮的方式是通过Switch/Case测试MenuEvent event.item.@ label的String结果.也许这不是最好的方法?
我有一个配置xml文件,我需要在flex应用程序之前解析值.
我创建了一个静态类,允许检索xml配置文件中的值.
我正在应用程序第一次加载时初始化此类,但是当xml文件加载了一个Loader类,该类同步加载该类时,在实际加载xml文件之前会要求该类 - 因此它会抛出错误.
有没有办法同步加载这个xml文件或任何人都建议解决这个问题?我们无法将文件作为类变量嵌入,因为我们需要能够远程更改值.
我正在使用e4X难以解析XML文件.我可以从'version'标签中获取信息,但我不能从任何嵌套标签中获取信息.
有人可以指出我做错了什么吗?
这是XML:
<NameOfRoot xmlns="http://www.theaddress.com/file">
<version>1.0</version>
<NameOfChild1>
<NameOfChild2>
<GeneralData>
<Identifier>2678</Identifier>
</GeneralData>
</NameOfChild2>
</NameOfChild1>
</NameOfRoot>
Run Code Online (Sandbox Code Playgroud)
这是代码:
<mx:HTTPService id="MyService" url="data.xml" result="resultHandler(event)" resultFormat="e4x"/>
private function resultHandler(event:ResultEvent):void {
XMLData = event.result as XML;
var ver:String = XMLData.*::version; // ver = 1.0
var id:String = XMLData.*::NameOfChild1.NameofChild2.GeneralData.Identifier; //empty string
}
Run Code Online (Sandbox Code Playgroud) 是否有一个与Array.indexOf等效的XMLList?
例如 -
var array:Array = ['one','two'];
trace(array.indexOf('two')); // returns 1, since it's at the second position
trace(array.indexOf('three')); // returns -1, since it isn't found
Run Code Online (Sandbox Code Playgroud)
... 对?但如果我有这个怎么办 -
var xml:XML = <list><item>one</item><item>two</item><list>
var xmlList:XMLList = list.item;
Run Code Online (Sandbox Code Playgroud)
必须有一种更简单的方法来检查XMLList中的一个节点是否具有特定值而不是循环遍历所有节点,对吧?类似于 -
xmlList.indexOfChildByNodeValue('two'); // returns 1, because it's the second child
xmlList.indexOfChildByNodeValue('three'); // returns -1, because it doesn't match any children
Run Code Online (Sandbox Code Playgroud)
合理?
有没有办法在Flex中执行类似以下(伪代码)的操作:
var x:XML = <xml>
if(condition){
<tag>hello</tag>
}
</xml>;
Run Code Online (Sandbox Code Playgroud)
这将返回<xml><tag>hello</tag></xml>如果条件是真实的和<xml></xml>(或<xml/>)如果条件是假的?
附加说明:我知道如何追加孩子等等.我正在寻找一种方法来在文字表达中做到这一点.