新足迹

 找回密码
 注册

精华好帖回顾

· 在工厂的那些日子(10,15,26,35,45,52)(附加照片) (2008-8-5) youyuan · “智者无敌”------在杀与不杀之间游离------ (2011-7-29) 太有才了
· 宝宝趣事--学话趣事两则 (2007-9-26) joy4land · 自制北京烤鸭 (2010-11-23) niuwa
Advertisement
Advertisement
查看: 1318|回复: 12

javascript & cdata(xml) [复制链接]

发表于 2011-4-6 20:21 |显示全部楼层
此文章由 tony534 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 tony534 所有!转贴必须注明作者、出处和本声明,并保持内容完整
各位前辈,小弟遇到一个问题,要用javascript 或 jquery中取得cdata里面的数据,google了半天也没有找到答案,

有没有什么办法可以取到呢?
Advertisement
Advertisement

发表于 2011-4-6 21:39 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
把代码贴出来看看

[ 本帖最后由 典 于 2011-4-6 21:51 编辑 ]

发表于 2011-4-6 21:48 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
google "access cdata with javascript".

发表于 2011-4-7 00:20 |显示全部楼层
此文章由 tony534 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 tony534 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-4-6 21:48 发表
google "access cdata with javascript".


thanks a lot.

one solution:
http://fczaja.blogspot.com/2007/ ... n-xml-dom-from.html

[ 本帖最后由 tony534 于 2011-4-7 00:37 编辑 ]

发表于 2011-4-7 00:24 |显示全部楼层
此文章由 tony534 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 tony534 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-4-6 21:39 发表
把代码贴出来看看


<html>
<head>
<title>test</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" >
$(document).ready(function(){
        var result = $("a")[0].childNodes[0].nodeValue;
        alert(result);
});
</script>
</head>
<body>
<div>
<a><![CDATA[<<!!Hello, World!!>>]]></a>
</div>
</body>
</html>

发表于 2011-4-7 09:56 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
See my example, It's not a solution, just interesting...
Usually I put some javascript in CDATA for xsl process...

<html>
<head>
<title>test</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" >
$(document).ready(function(){
   var result = $("#bb")[0].childNodes[1].nodeValue;
      alert(result);

    result = $("#a")[0].childNodes[0].nodeValue;
        alert(result);

    });


</script>

</head>
<body>

<div id="bb">
<![CDATA[<<BOOK>This is my book</BOOK>>]]>
</div>

<a><![CDATA[<<!!Hello, World!!>>]]></a>


<div id="cc">
<script type="text/javascript" >
<![CDATA[
tellme();

function tellme(){
alert("Hehe");
}
]]>
</script>
</div>
</body>
</html>
Advertisement
Advertisement

发表于 2011-4-7 19:47 |显示全部楼层
此文章由 tony534 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 tony534 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-4-7 09:56 发表
See my example, It's not a solution, just interesting...
Usually I put some javascript in CDATA for xsl process...



test


$(document).ready(function(){
   var result = $("#bb")[0].childNodes[1].nod ...


多谢,以后也把javascript 放cdata里面,方便html解析转化 :)

发表于 2011-4-7 19:52 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
在我的IE8里测试你的例题(要改成标准结构---参见我的例题),$("#bb")[0].childNodes[1].nodevalue可以得到正确结果,childNodes[0]不行
javascript 放cdata里一般来说是个坏主意,用stylesheet的时候才有用,也不是很好,

发表于 2011-4-7 21:18 |显示全部楼层
此文章由 tony534 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 tony534 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-4-7 19:52 发表
在我的IE8里测试你的例题(要改成标准结构---参见我的例题),$("#bb")[0].childNodes[1].nodevalue可以得到正确结果,childNodes[0]不行
javascript 放cdata里一般来说是个坏主意,用stylesheet的时候才有用,也不是很好,


确实,在IE里面不行,但是我用childNodes[1] 也不行,得到的Error为 Unable to get value of the property 'nodeValue': object is null or undefined, 我用的IE9和IE9的IE8模式测试的。

如果,var result = $("#bb")[0].childNodes.length 的话, result为0.

我同事把我需要的东西都放到CDATA里面,我不得不到里面去取,她已经针对这个固定的schema写的很多东西了,又有不能让她在改了,郁闷啊.....

发表于 2011-4-7 22:20 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我是说你那个Hello world不是一个合法的XML结构
写成这样 你就能拿到结果(childNodes[1])
<![CDATA[<n1>!!Hello, World!22!<n1>]]>
或者<![CDATA[<<n1>!!Hello, World!22!<n1>>]]>

[ 本帖最后由 典 于 2011-4-7 22:21 编辑 ]

发表于 2011-4-7 23:12 |显示全部楼层
此文章由 tony534 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 tony534 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-4-7 22:20 发表
我是说你那个Hello world不是一个合法的XML结构
写成这样 你就能拿到结果(childNodes[1])
!!Hello, World!22!]]>
或者!!Hello, World!22!>]]>


谢谢,刚才没注意CDATA里面的Tag. 那如果我要取出里面的完整的文本, 包括完整Tag的,该如何取呢, 比如<div>
<a id="bb"><![CDATA[<A><AA>hello, world</AA><BB><CC name="C">CC</CC></BB></A>]]></a>
</div>
取出里面的 <A><AA>hello, world</AA><BB><CC name="C">CC</CC></BB></A> 如果用XX的IE的话?
Advertisement
Advertisement

发表于 2011-4-8 00:29 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
用IE, 我不知道Jquery怎么弄得。。。
用MXSML肯定是可以的,而且使用Xpath查找还方便代码,看我下面的代码,

<html>
<head>
<title>test</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" >

function htm_Create_Dom_Object() {
            var xmlDOM
            var progIDs =['Msxml2.DOMDocument.6.0','Msxml2.DOMDocument.4.0','Msxml2.DOMDocument.3.0','Msxml2.DOMDocument']; // MSXML5.0, MSXML4.0 and Msxml2.DOMDocument all have issues - be careful when using.  Details below.
        for (var i = 0; i < progIDs.length; i++) {
            try {
                xmlDOM = new ActiveXObject(progIDs);
                if (xmlDOM != null) {
                    if (progIDs == 'Msxml2.DOMDocument.6.0') {//msxml 6
                        xmlDOM.setProperty("AllowXsltScript", true);
                        xmlDOM.setProperty("AllowDocumentFunction", true);
                    }
                    xmlDOM.resolveExternals = false;
                    xmlDOM.preserveWhiteSpace = false;
                    xmlDOM.validateOnParse = false;
                    xmlDOM.async = false;
                    return xmlDOM;
                }
            }
            catch (ex) {
                 
            }
        }
       return null;
        }
  





$(document).ready(function(){

var xdoc=htm_Create_Dom_Object();
xdoc.loadXML("<n1>OKK<n2 invoice_id='19'>!!Hello, World!19!</n2><n2 invoice_id='20'>!!Hello, World!22!</n2><n2 invoice_id='21'>Second item</n2></n1>");
if(xdoc!=null)alert("ok");
var mlist= xdoc.selectNodes("n1/n2[@invoice_id>19]")

alert(mlist.length)
var i;
for(i=0;i<mlist.length;i++)
{
alert(mlist.text);
alert(mlist.getAttribute("invoice_id"))
}

  
    var result1 = $("#a").html();
         alert(result1);

    });


</script>

</head>
<body>

<div id="bb">
<![CDATA[<<BOOK>This is my book</BOOK>>]]>
</div>

<a id="a">
<![CDATA[<n1>OKK<n2 invoice_id='19'>!!Hello, World!19!</n2><n2 invoice_id='20'>!!Hello, World!22!</n2><n2 invoice_id='21'>Second item</n2></n1>]]>
</a>


<div id="cc">
<script type="text/javascript" >
<![CDATA[
tellme();

function tellme(){
alert("Hehe");
}
]]>
</script>
</div>
</body>
</html>

发表于 2011-4-8 22:09 |显示全部楼层
此文章由 tony534 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 tony534 所有!转贴必须注明作者、出处和本声明,并保持内容完整
感谢!!, IE确实麻烦阿

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部