<html>
<head><title></title></head>
<body>
<iframe id="myifr">
<xml version="1.0" encoding="UTF-8" standalone="yes">
<data>
<code>我就要读这个</code>
</data>
</xml>
</iframe>
</body>
</html>
请高手写一下JS获取iframe中xml的code中这段“我就要读这个”

解决方案 »

  1.   

    var root=window.fraems["myifr"].contentWindow.getElementsByTagName("data")[0];没有测试 呵呵
      

  2.   

    三楼:对象为空或不是对象
    四楼:这是用IFRAME跨域请求,远端返回XML,需要获取返回值并处理,跨域请求已经解决了,现在就是获取的问题,JS已经延时处理过了,获取的肯定是XML文件。在IFRAME中FF-BUG中已经看到了返回值就是我贴出来的,现在要求取出这个XML文件并获取节点内容,所以才这么写代码
      

  3.   

    如果你写得符合xml书写标准的话,用jQuery可以轻易解读:
    <iframe id="myifr"> 
    <xml version="1.0" encoding="UTF-8" standalone="yes"> 
    <data> 
    <code>我就要读这个 </code> 
    </data> 
    </xml> 
    </iframe>    alert($($('#myifr').html()).filter('code').text());
      

  4.   

    写错,重来如果你写得符合xml书写标准的话,用jQuery可以轻易解读: 
    <iframe id="myifr"> 
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <data> 
    <code>我就要读这个 </code> 
    </data> 
    </iframe>    alert($($('#myifr').html()).filter('code').text());
      

  5.   

    <xml version="1.0" encoding="UTF-8" standalone="yes"> 
    <data> 
    <code>我就要读这个 </code> 
    </data> 
    </xml> 
    是这个
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <data> 
    <code>我就要读这个 </code> 
    </data> 
    不是这个
    我也注意到这个区别了。
      

  6.   

    如果不按标准写法,xml也不能换成其它字符,那还真想不出来怎么读
      

  7.   

    兄弟这样可以了
      
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head><title>
    无标题页
    </title></head>
    <body>
        <form name="form1" method="post" action="WebForm1.aspx" id="form1">
    <div>
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGSQD9Q3HDt+gXxVAR6MoQPeTvR5mg==" />
    </div>
     
        <div>
            <iframe src="XMLFile1.xml" id="myifr">
            </iframe>
        </div>
        <div>       
            <input type="button" value="测试" onclick="fnGetCode();"/>
            <script type="text/javascript">
                function getXMLDom(path) {
                    /// <summary>
                    /// 加载xmlDom
                    /// </summary>
                    var xmlDoc = null;
                    try {//Internet Explorer  
                        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                    } catch (e) {
                        try {//Firefox, Mozilla, Opera, etc.    
                            xmlDoc = document.implementation.createDocument("", "", null);
                        } catch (e) {
                            alert("加载xml文档失败:" + e.message);
                        }
                    }
                    try {
                        xmlDoc.async = false;
                        var b = xmlDoc.load(path);
                        if (b) {
                            return xmlDoc;
                        }
                    } catch (e) {
                        alert("加载xml文档失败:" + e.message);
                        return null;
                    }
                }
                function fnGetCode(){                
                    var xmlDoc=getXMLDom(document.getElementById("myifr").src);
                    alert(xmlDoc.getElementsByTagName("code")[0].text);
                }
            </script>
        </div>
        </form>
    </body>
    </html>
    XMLFile1.xml<xml version="1.0" encoding="UTF-8" standalone="yes"> 
    <data> 
    <code>我就要读这个 </code> 
    </data> 
    </xml>
      

  8.   

    var xmldoc = document.getElementById('myfrm').contentDocument我用这个来取,xmldoc类型肯定是object xmldocument。但xmldoc.getElementsByTagName("code")[0]...的时候肯定取不出来
      

  9.   

    谢谢10搂,但远端是.PHP文件,用URL不可能读取PHP,xml是由PHP生成的并IFRAME跨域请求后返回的。直接读取XML在这个场景不合适吧?
      

  10.   

    没有碰到过.中国站长网站联盟高级Q群 103352744 有创意才有新意,火爆中. 星洲E网 http://www.xing158.cn 搜索其全,综合性最大的,功能最强的实用,星洲E网免费推广 http://www.xing158.cn/a 免费推广平台 免费推广平台,免费推广方法,免费推荐  
      

  11.   

    这样可以读出来:
    document.getElementById('myifr').innerHTML.match(/<code>(\w+)<\/code>/g);
    alert(RegExp.$1);
      

  12.   

    14搂ie8,ff读取的都为空。不报错了,但为空
      

  13.   

    哦,我是用英文试的,改为下面,试了一下,可以document.getElementById('myifr').innerHTML.match(/<code>([\w\u4e00-\u9fa5]+)<\/code>/g);
    alert(RegExp.$1);
      

  14.   

    document.getElementById('myifr').innerHTML.match(/ <code>([\d\w\u4e00-\u9fa5]+) <\/code>/g); 
    alert(RegExp.$1); 
      

  15.   

    怎么获取都是空,我不知道是什么原因ie8+ff,下面是您刚才给的代码,请帮我看一下是不是这么写,我单独写了个测试用的
    function getXmlDoc(){
    document.getElementById('txt').innerHTML.match(/ <code>([\d\w\u4e00-\u9fa5]+) <\/code>/g); 
    alert(RegExp.$1); 
    }
    <input type="button" onclick="getXmlDoc();" value="获取">
    <textarea name="txt" id="txt"><code>99902</code></textarea> 
      

  16.   

    放在textarea里面,要用value代替innerHTMLdocument.getElementById('txt').value.match(/ <code>([\w\u4e00-\u9fa5]+) <\/code>/g); 
    alert(RegExp.$1); 
      

  17.   

    假如document.getElementById('myifr').innerHTML可以获取xml文档的字符串标示的话,用下面这个方法可以转化会xml文档对象。//var xmlDoc = createXmlDoc(document.getElementById('myifr').innerHTML);
    //xmlDoc.getElementsByTagName("code")[0]
    function createXmlDoc(xmlText) {
        if (!xmlText) return null;
        try {
            var xmlDom = new ActiveXObject("Microsoft.XMLDOM")
            xmlDom.loadXML(xmlText)
            return xmlDom
        }
        catch (e) {
            try {
                return new DOMParser().parseFromString(xmlText, "text/xml");
            } catch (e) {
                return null;
            }
        }
    }
      

  18.   

    value也空,太纠结了
    拜请神人xmliy赐教
    不纠结那个测试的了 是否<code>的<>要转意?死活为空
    firebug里看到的返回就是
    <xml version="1.0" encoding="UTF-8" standalone="yes"> 
    <data> 
    <code>我就要读这个 </code> 
    </data> 
    </xml> 
    HTML打印出来也是这样
      

  19.   

    document.getElementById('myfrm').innerHTML我alert了,为空,FF中却有XML,我延时了ALERT,也是为空,是不是这个就是没取出任何值?
      

  20.   

    21搂的是否是说xmlText=document.getElementById('myfrm').innerHTML取出字符串?
    貌似说准了,的确什么都取不出来纠结啊
      

  21.   

    我在IE8,FF下都试了,没问题啊,注意不要有多余的空格
    document.getElementById('myfrm').innerHTML.match(/<code>([\w\u4e00-\u9fa5]+)<\/code>/g); 
    alert(RegExp.$1); 
    还有,<script>要放到iframe之后
      

  22.   

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script language="javascript">
    function getIframeData(){ 
    /* do something */ 
    var f = document.getElementById("myfrm");
    if (f){
    f.src = "http://888.pok88.com/app/api/testxml.php"
    }else{
    var IframeObj = document.createElement("iframe");
           IframeObj.id= "myfrm";
           IframeObj.width =0;
          IframeObj.height =0;
           IframeObj.frameborder = 0;
          IframeObj.src="http://888.pok88.com/app/api/testxml.php";       IframeObj.name = "myfrm";
           document.body.appendChild(IframeObj);       window.frames.myfrm.name = "myfrm";
    }
    //getXmlDoc()
    setTimeout("getXmlDoc()",2000)

    function getXmlDoc(){
    document.getElementById('myfrm').innerHTML.match(/ <code>([\d\w\u4e00-\u9fa5]+) <\/code>/g); 
    alert(RegExp.$1); 
    }</script>
    </head><body>
    <input type="button" onclick="getIframeData();" value="提交">
    <input type="button" onclick="getXmlDoc();" value="获取">
    <iframe width="0" height="0" name="myfrm" id="myfrm" src=""></iframe> 
    </body>
    </html>
    我把代码贴出来吧
    XML返回值已经修改了FF中只返回
    <data> 
    <code>我就要读这个 </code> 
    </data> 
      

  23.   

    我觉得ajax请求跨域的问题最好还是在服务器端做代理,再服务器端发送一个请求获取返回的数据再输出到客户端。
      

  24.   

    兄弟如果用jquery的话,这回可以了吧<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head><title>
    无标题页
    </title>    <script src="../../Js/jquery.js" type="text/javascript"></script>
    </head>
    <body>
        <form name="form1" method="post" action="WebForm1.aspx" id="form1">
    <div></div>    <div>
            <iframe src="XMLFile1.xml" id="myifr" name="myifr">
            </iframe>
        </div>
        <div>       
            <input type="button" value="测试" onclick="fnGetCode();"/>
            <script type="text/javascript">
                function fnGetCode(){                                
                    var obj=null;
                    if (document.all){//IE
                        obj = document.frames["myifr"].document;                 
                        alert($(obj).find(".tx").text());
                    }else{//Firefox 
                        obj = document.getElementById("myifr").contentDocument;                                                
                        alert($(obj).find("code").text());                                      
                    }                                
                }
            </script>
        </div>    </form>
    </body>
    </html>
      

  25.   

    代理也是在获取XML返回处理的时候出错,我试过了HTTP.SENT(),效果一样的
      

  26.   

    不会php,搜索了下http://hi.baidu.com/masmyc/blog/item/b4d5a213d610602add5401d6.html在服务器端发送一个请求("http://888.pok88.com/app/api/testxml.php")获取返回的xml,然后输出到客户端,这样就不会有跨域的问题
      

  27.   

    试试:
    document.getElementById('myfrm').contentWindow.document.body.innerHTML.match(/<code>([\d\w\u4e00-\u9fa5]+)<\/code>/g); 
    alert(RegExp.$1); 
      

  28.   

    29搂谢谢,但跨域的时候
    obj = document.frames["myifr"].document;会出错!拒绝访问,同域访问无所谓的是可以的
    28搂能否劳驾给个后台跨域的实例,我看我那个是不是有写错的地方,我用的
    Http=server.createobject("WinHttp.WinHttpRequest.5.1")来做的
      

  29.   


    var f = document.getElementById('myfrm');
    f.onload = function () {
        document.getElementById('myfrm').contentWindow.document.body.innerHTML.match(/<code>([\d\w\u4e00-\u9fa5]+)<\/code>/g); 
        alert(RegExp.$1); 
    }
      

  30.   

    我写的ASP,访问的PHP,我服务器 语言ASP
      

  31.   

    对了不管ie,firefox注意最后生成的文档结构  根据实际情况改下代码应该就可以了
      

  32.   

    这样的,我要请求后,才能在getElementById('myfrm')中有数据,不请求,在ONLOAD的时候没数据的
      

  33.   

    各位大侠有没有ASP后台代理跨域的实例?返回类型是XML的处理
      

  34.   

    // 加载xml文档
    loadXML     = function(xmlFile)
    {
         var xmlDoc;
         if(window.ActiveXObject)
         {
             xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
             xmlDoc.async     = false;
             xmlDoc.load(xmlFile);
         }
         else if (document.implementation&&document.implementation.createDocument)
         {
             xmlDoc = document.implementation.createDocument('', '', null);
             xmlDoc.load(xmlFile);
         }
         else
         {
             return null;
         }
         return xmlDoc;
    }// 首先对xml对象进行判断
    checkXMLDocObj  = function(xmlFile)
    {
         var xmlDoc  = loadXML(xmlFile);
         if(xmlDoc == null)
         {
             alert('您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!'); 
         }
        
        alert("我要取的值="+ xmlDoc.getElementsByTagName("code")[0].childNodes[0].nodeValue);
    }当然,如果你要解析的xml文件可能不存在,那么这种写法就不能用,因为当被解析的文件不存在而你又想做一些其他操作的话,这时候在FF是会出错的,因为此时typeof xmlDoc.getElementsByTagName("code")[0] == 'undefined'.希望对你有帮助
      

  35.   

    test.html 发送ajax请求test.asp,使用了jquery框架,可以修改成其他的或者直接写    <script type="text/javascript">
            window.onload = (function() {
                $.ajax({
                    type: "GET",
                    url: "test.asp",
                    cache: false,
                    dataType: "xml",
                    success: function(xmlDoc) {
                        alert(xmlDoc.getElementsByTagName("Code")[0].childNodes[0].nodeValue);
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        debugger;
                    }
                });
            });
        </script>
    test.asp,发送请求,获取xml文档输出到客户端
    <%
    Response.Charset="UTF-8"
    Response.ContentType="text/xml"
    Dim s 
    s= GetHttpPage("http://888.pok88.com/app/api/testxml.php","UTF-8") 
    Response.Write(s)Function GetHttpPage(url, charset)
        Dim http
        Set http = Server.createobject("Msxml2.ServerXMLHTTP")
        http.Open "GET", url, false
        http.Send()
        If http.readystate<>4 Then
            Exit Function
        End If
        GetHttpPage = BytesToStr(http.ResponseBody, charset)
        Set http = Nothing
    End function
    Function BytesToStr(body, charset)
        Dim objStream
        Set objStream = Server.CreateObject("Adodb.Stream")
        objStream.Type = 1
        objStream.Mode = 3
        objStream.Open
        objStream.Write body
        objStream.Position = 0
        objStream.Type = 2
        objStream.Charset = charset
        BytesToStr = objStream.ReadText
        objStream.Close
        Set objStream = Nothing
    End Function
    %>
      

  36.   

    <script type="text/javascript">
    window.onload=function(){
    //var nodes=document.getElementById("myifr").document.body.childNodes[0].childNodes;
    var testStr=document.getElementById("myifr").innerHTML
    //方法一
    /*
    alert(window.decodeURI(testStr));
    var reg=/[(&lt;)|<]code[ \t\r\n]?[(&gt;)|>].*?[(&lt;)|<]\/code[ \t\r\n]?[(&gt;)|>]/gi;
    alert(reg.exec(decodeURI(testStr)));
    */
    //方法2
    testStr=testStr.replace(new RegExp("&lt;","gi"),"<").replace(new RegExp("&gt;","gi"),">");
    alert(testStr);
    var xmldoc=null;
    try{
    xmldoc=new ActiveXObject("Microsoft.XMLDOM");
    xmldoc.loadXML(testStr);
    }catch(e){
    xmldoc=new DOMParser().parseFromString(testStr,"text/xml");
    }
    for(var i=0;i<xmldoc.childNodes[0].childNodes.length;i++){
    if(xmldoc.childNodes[0].childNodes[i].nodeName=="data")
    for(var j=0;j<xmldoc.childNodes[0].childNodes[i].childNodes.length;j++){
    if(xmldoc.childNodes[0].childNodes[i].childNodes[j].nodeName=="code")
    alert(xmldoc.childNodes[0].childNodes[i].childNodes[j].childNodes[0].nodeValue);
    }
    }
    }
    </script>
      

  37.   


    <script type="text/javascript">
    window.onload=function(){
    //var nodes=document.getElementById("myifr").document.body.childNodes[0].childNodes;
    var testStr=document.getElementById("myifr").innerHTML
    //方法一
    /*
    alert(window.decodeURI(testStr));
    var reg=/[(&lt;)|<]code[ \t\r\n]?[(&gt;)|>].*?[(&lt;)|<]\/code[ \t\r\n]?[(&gt;)|>]/gi;
    alert(reg.exec(decodeURI(testStr)));
    */
    //方法2
    testStr=testStr.replace(new RegExp("&lt;","gi"),"<").replace(new RegExp("&gt;","gi"),">");
    alert(testStr);
    var xmldoc=null;
    try{
    xmldoc=new ActiveXObject("Microsoft.XMLDOM");
    xmldoc.loadXML(testStr);
    }catch(e){
    xmldoc=new DOMParser().parseFromString(testStr,"text/xml");
    }
    for(var i=0;i<xmldoc.childNodes[0].childNodes.length;i++){
    if(xmldoc.childNodes[0].childNodes[i].nodeName=="data")
    for(var j=0;j<xmldoc.childNodes[0].childNodes[i].childNodes.length;j++){
    if(xmldoc.childNodes[0].childNodes[i].childNodes[j].nodeName=="code")
    alert(xmldoc.childNodes[0].childNodes[i].childNodes[j].childNodes[0].nodeValue);
    }
    }
    }
    </script>