0

我有一些看起来像这样的 XML:

<LayerDefinition xsi:type ="GridLayerDefinition">
  <Name>Solids</Name>
  <Grid>
    <Width>48</Width>
    <Height>48</Height>
  </Grid>
  <ScrollFactor>
    <X>1</X>
    <Y>1</Y>
  </ScrollFactor>
  <Color A="255" R="0" G="0" B="0" />
  <ExportMode>Rectangles</ExportMode>
</LayerDefinition>

我想得到那个 xsi:type 属性的值。由于冒号,我不能简单地使用 .@whatever。它不会编译。有人建议我尝试使用 .attribute("xsi:type"),但它什么也没返回。这是我的代码:

private function loadProject():void
    {
        var curProject:XML = FP.getXML(TESTPROJECT);
        var entry:XML;
        var counter:uint = 0;
        trace("Loading project");
    //  trace(curProject.*);
        trace (curProject.LayerDefinitions.LayerDefinition.attribute("xsi:type"));
        for each (entry in curProject.LayerDefinitions.LayerDefinition)
        {
            //trace("Grid type is: " + entry.attribute("xsi:type"));
            //  trace("Grid type is: " + entry.attribute('xsi:type'));
            //  trace ("Grid is: " + entry.Name);
        }
    }

有什么建议吗?我觉得我在这一点上已经尝试了一切

4

1 回答 1

1

你没有回复我对你其他帖子的评论,为什么不呢?xsi 在哪里定义?在使用此 XML 的代码中的某处应该有一个 xmlns:xsi="someuri"。对于具有 xml 命名空间的 XML 中的属性,我遇到了类似的问题,为了让 AS3 中的 E4X 提取这些合格的属性或节点,我必须在 AS3 中创建一个命名空间。

阅读下面文档中名为 XML 命名空间的部分

http://www.senocular.com/flash/tutorials/as3withflashcs3/?page=4

基本上你需要做类似的事情(下面来自上面的链接):

// XML with xpl namespace
var xml:XML = 
    <xml xmlns:xpl="http://www.example.com/uri/">
        <xpl:text value="Hello World" xpl:value="Hello Namespace" />
    </xml>;

// Define namespace with xpl URI
var xplNs:Namespace = new Namespace("http://www.example.com/uri/");

// Get value of text attribute
// with and without namespace
trace(xml.xplNs::text.@value); // traces Hello World
trace(xml.xplNs::text.@xplNs::value); // traces Hello Namespace

另一种选择是:

var xplNs:Namespace = new Namespace("http://www.example.com/uri/");
use namespace xmplNs;

在您的情况下,新命名空间调用的参数应该是 xmlns:xsi= 设置的任何值。然后,您可以为要使用该名称空间获取的任何属性或节点添加 xplNs:: 或任何您命名的名称空间实例的前缀。

或者,如果您可以使用更 hacky 的方法,您也可以按照此站点上的建议删除名称空间(诚然,我以前自己做过,但总是觉得这是一个肮脏的解决方法,因为我可以做正确的事情)http ://brianmriley.wordpress.com/2008/03/14/remove-xml-namespaces-in-flex-or-as3/

如果代码中没有 xmlns:xsi 我对正在发生的事情感到茫然。

于 2012-08-02T02:09:28.597 回答