0

我有两个 XML 文件,

这是从 Web 服务调用输出到 LMS (Moodle) http://clsasset.coastlinelive.com/LTI/XMLFile.xml的复制/粘贴:

<?xml version="1.0" encoding="UTF-8"?>
<imsx_POXEnvelopeResponse xmlns="http://www.imsglobal.org/lis/oms1p0/pox">
  <imsx_POXHeader>
    <imsx_POXResponseHeaderInfo>
      <imsx_version>V1.0</imsx_version>
      <imsx_messageIdentifier>524041811</imsx_messageIdentifier>
      <imsx_statusInfo>
        <imsx_codeMajor>success</imsx_codeMajor>
        <imsx_severity>status</imsx_severity>
        <imsx_description>Grade replace response</imsx_description>
        <imsx_messageRefIdentifier>526f30b728966</imsx_messageRefIdentifier>
      </imsx_statusInfo>
    </imsx_POXResponseHeaderInfo>
  </imsx_POXHeader>
  <imsx_POXBody>
    <replaceResultResponse/>
  </imsx_POXBody>
</imsx_POXEnvelopeResponse>

这是我在网上随机找到的一个示例 XML,然后将一些元素重命名为与第一个相同的元素 http://clsasset.coastlinelive.com/LTI/XMLFile2.xml

<?xml version="1.0"  encoding="UTF-8"?>

<catalog>
  <imsx_codeMajor id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
    <description>
      An in-depth look at creating applications
      with XML.
    </description>
  </imsx_codeMajor>
  <imsx_codeMajor id="bk102">
    ...
  </imsx_codeMajor>
  ...
</catalog>

这是我用来读取这些文件的 AS3 代码:

var commandURL:String = "http://clsasset.coastlinelive.com/apps/LTI/XMLFile.xml?time=" + Math.random();

//Load XML
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(new URLRequest(commandURL));

xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded, false, 0, true);
var xmlData:XML;



function xmlLoaded(e:Event):void
{
var xmlLoader:URLLoader = (e.target as URLLoader);
xmlLoader.removeEventListener(Event.COMPLETE, xmlLoaded);
xmlData = XML(xmlLoader.data);

trace("LTI Provider Full Data" + xmlData);

var statusXML:XMLList = xmlData.child(0);
trace("LTI Provider Result Data" + xmlData..imsx_codeMajor);

}

出于某种原因,加载 XMLFile.xml 时,“xmlData..imsx_codeMajor”(或 .. 任何元素)总是返回空。但是,如果我加载 XMLFile2.xml 它会返回一个不错的 XMLList 对象。

为了好玩,我将整个 XMLFile.xml 重新输入到 XMLFile3.xml,它也可以很好地加载和解析。

这让我认为这是一个编码问题。问题是 XML 数据是通过 PHP 使用从 Web 服务接收数据的变量打印的,我无法控制该变量。

吐出 XML 的 PHP 脚本是 LTI 示例代码库的衍生版本,PHP 文件的基本部分是:

header ('Content-Type: text/xml; charset=utf-8');
.
.
.
$response = sendOAuthBodyPOST($method, $endpoint, $oauth_consumer_key, $oauth_consumer_secret, $content_type, $postBody);  //Call LMS with data
echo(utf8_encode($response));  //write the response XML

它应该是一个与平台无关的调用,所以我不应该能够操纵 sendOAuthBodyPost 调用另一端的内容。

如何修复输出编码以便 Flash 能够解析它?我是 PHP 新手,非常感谢任何帮助。

另一个注意事项:我可以使用 xmlData.child(index) 而不是 xmlData.child(name) 遍历 XMLFile.xml 结构,并且任何读取任何节点上的任何属性的尝试总是返回空。


文件 3 http://clsasset.coastlinelive.com/LTI/XMLFile3.xml

<?xml version="1.0"  encoding="UTF-8"?>
<imsx_POXEnvelopeResponse>
  <imsx_POXHeader>
    <imsx_POXResponseHeaderInfo>
      <imsx_version>V1.0</imsx_version>
      <imsx_messageIdentifier>524041811</imsx_messageIdentifier>
      <imsx_statusInfo>
        <imsx_codeMajor>success</imsx_codeMajor>
        <imsx_severity>status</imsx_severity>
        <imsx_description>Grade replace response</imsx_description>
        <imsx_messageRefIdentifier>526f30b728966</imsx_messageRefIdentifier>
      </imsx_statusInfo>
    </imsx_POXResponseHeaderInfo>
  </imsx_POXHeader>
  <imsx_POXBody>
    <replaceResultResponse />
  </imsx_POXBody>
</imsx_POXEnvelopeResponse>
4

0 回答 0