在控件上显示XSL格式化XML

时间:2010-12-08 11:53:52

标签: xml flex xslt

我有使用XSL格式化的XML文件。他们在IE上看起来很棒。

现在我如何使用Flex(而非AIR)执行相同的操作?我想使用像TextArea这样的东西而不是数据网格。

感谢。

3 个答案:

答案 0 :(得分:0)

我想我可以使用JavaScript来进行转换。所以我的Flex应用程序将XML和XSL URL传递给JavaScript。 JavaScript执行XML-XSL转换。它应该将转换后的HTML传递给Flex,因此我的Flex应用程序可以弹出TextArea(或类似的)来显示它。

我想我越来越近了。但目前的问题是,转换后的HTML似乎是空/空。有什么想法吗?

function loadXMLDoc(dname)
{
  if (window.XMLHttpRequest)
  {
    xhttp=new XMLHttpRequest();
  }
  else
  {
    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xhttp.open("GET",dname,false);
  xhttp.send("");
  return xhttp.responseXML;
}

function displayResult(xmlURL, xslURL) 
{
  //prepare xml and xsl
  xml=loadXMLDoc(xmlURL);
  xsl=loadXMLDoc(xslURL);

  //get flash
  var isIE = navigator.appName.indexOf("Microsoft") != -1;
  var flashName = "index";
  var flashObject = (isIE) ? window[flashName] : document[flashName];

  // code for IE
  if (window.ActiveXObject)
  {
    ex=xml.transformNode(xsl);
    flashObject.GetTransformedHTML(ex); 
  }
  // code for Mozilla, Firefox, Opera, etc.
  else if (document.implementation && document.implementation.createDocument)
  {
    xsltProcessor=new XSLTProcessor();
    xsltProcessor.importStylesheet(xsl);
    resultDocument = xsltProcessor.transformToFragment(xml,document);
    document.getElementById("example").appendChild(resultDocument);
  }
}

感谢。

答案 1 :(得分:0)

我找到了解决方案。

我没有使用弹出窗口显示XSL应用的XML(例如使用IE),而是可以在Flex中使用此处的组件显示它:

http://code.google.com/p/flex-iframe/

答案 2 :(得分:0)

下面是一个示例,这里重要的是下面的行。 我们应该使用 toXMLString()函数:

CBSPopup.showNotification("stavka : " + stavka.toXMLString());

其余代码:

if(children.length() > 0){
                    var idPravila : String = _dataprovider.@IdPravila[0];
                    for each(var child:XML in children ) {
                        var stavka : XML = <entity name="PopustBenzinskeStanice" 
                                            SCCode={child.@SCCode[0]} 
                                            SubcompanyName={child.@SubcompanyName[0]} 
                                            SCCodeMedjusloj={child.@SCCodeMedjusloj[0]} 
                                            IdPravila={idPravila} 
                                        />;
                        CBSPopup.showNotification("stavka : " + stavka.toXMLString());
                        _dataprovider.appendChild(stavka);
                    }
                    //if (poslovneJediniceGrid.dataProvider == null) {
                        poslovneJediniceGrid.DataProvider  = _dataprovider.entity.(attribute("name") == "PopustBenzinskeStanice");
                    //}

                    poslovneJediniceGrid.dataProvider.refresh();
                }