0

我们的项目需要浏览和上传 XML 文件并将其显示在数据网格上,编辑网格,然后将内容保存到数据库中。我可以看到从特定文件夹获取 XML 并显示在数据网格上的示例,但看不到任何浏览 XML 然后上传的示例。如果有人可以向我指出示例或一些示例代码,那就太好了。我们的 XML 看起来像:

<VisitImportList>
    <Visit>
        <AuditDetails>
            <UpdateUser>ADMIN</UpdateUser>
            <UpdateTimestamp>2010-10-22T16:25:26.593Z</UpdateTimestamp>
        </AuditDetails>
        <VisitId>3</VisitId>
        <MeasurementCollectionId>4</MeasurementCollectionId>
        <WeightConfirmationCode>5</WeightConfirmationCode>
        <PrefilledIndicator>true</PrefilledIndicator>
        <VisitDate>2010-10-22T16:25:26.593Z</VisitDate>     
    </Visit>
    <Visit>
        <AuditDetails>
            <UpdateUser>ADMIN</UpdateUser>
            <UpdateTimestamp>2010-10-22T16:25:26.593Z</UpdateTimestamp>
        </AuditDetails>
        <VisitId>3</VisitId>
        <MeasurementCollectionId>3</MeasurementCollectionId>
        <BloodPressureConfirmationCode>4</BloodPressureConfirmationCode>
        <PrefilledIndicator>true</PrefilledIndicator>
        <VisitInvalidCode>1</VisitInvalidCode>
        <VisitInvalidReasonText>No Dates</VisitInvalidReasonText>
    </Visit>
</VisitImportList>

好的,我已经能够使用 FileReference 上传和 XML/XMLListCollection 在网格上显示数据。现在的问题是当我尝试保存到数据库时。我不想创建一个新线程,所以我在这里添加了我的问题:

private function saveVisit(event:MouseEvent): void
            {
var decoder:SimpleXMLDecoder = new SimpleXMLDecoder();
                var data:Object = decoder.decodeXML(xmlDoc);

                var array:Array = ArrayUtil.toArray(data.VisitImportList.Visit);
                tempCollection = new ArrayCollection(array);

现在我的数组集合(tempCollection)中有数据。但它包含通用对象,我需要将它们转换为访问对象。所以我想循环遍历 ArrayCollection,将对象转换为特定的自定义访问对象,然后将它们添加到另一个集合(我确定这不是正确的方法,但我无法想出一个备用):

     for (var i:int = 0; i < tempCollection.length; ++i) 
                        {               
                            model.visit = new Visit();  
                            model.visit = Visit(tempCollection.getItemAt(i, 0)); // This line gives the error Type Coercion failed: cannot convert Object@1d4e4719 to com.model.Visit.
                            model.visit = tempCollection.getItemAt(i) as Visit; // This line always has Visit as null eventhough the tempCollection has 2 objects

model.pvList.visits.addItemAt(Visit, i);
}

因此,有人可以帮助了解如何遍历 ArraCollection 并将 AS 对象转换为自定义访问对象,然后添加到另一个 ArrayCollection 或更简单的方法来执行此操作

谢谢

哈里什

4

1 回答 1

1

如果您正在使用 AIR 应用程序,您可以使用 Flex 中的 File 和 FileStream 对象轻松访问计算机中的资源。

http://livedocs.adobe.com/flex/3/html/help.html?content=Filesystem_16.html

获取 XML 对象,然后将其从其 item 命令转换为 XMLListCollection,即

var xmlProvider:XMLListCollection = new XMLListCollection(xml.Visit);

将此提供程序设置为您的数据网格并编写脚本以按照您想要的方式上传和保存此数据。

但是,如果您正在编写 Web 应用程序。您无法访问不在客户端上的弹性临时文件路径中的资源。或者您必须使用“全局安全设置”来灵活访问客户端计算机上的文件夹/文件。在这种情况下,相同的 AIR api 应该可以工作。

但是,如果您不想这样做,那么显然您必须在服务器上上传文件,在客户端使用 HTTPService 读取该对象,创建 XMLListCollection 对象并将数据加载到 DataGrid 中。这会有所帮助

  1. 上传文件
  2. 服务器上 XML 文件的 HTTP 服务 + DataGrid 示例
于 2010-10-24T23:05:59.950 回答