Javascript快速添加cdata节?

我无法处理xml节点属性中存在的特殊字符.为了解决这个问题,我试图将属性呈现为子节点,并在必要时使用cdata节来避开特殊字符.问题是,我似乎无法正确地将cdata节附加到节点上.

我正在遍历源xml节点的属性并创建新节点.如果attribute.name =“ description”,我想将attribute.text()放在cdata节中并追加新节点.那就是我跳的轨道.

     // newXMLData is the new xml document that I've created in memory
    for (var ctr =0;ctr< this.attributes.length;ctr++){  // iterate over the attributes 
          if( this.attributes[ctr].name =="Description"){   // if the attribute name is "Description" add a CDATA section 
             var thisNodeName =  this.attributes[ctr].name;
               newXMLDataNode.append("<"+thisNodeName +"></"+ thisNodeName +">" );
               var cdata = newXMLData.createCDATASection('test');  // here's where it breaks. 
          } else {
           // It's not "Description" so just append the new node.
            newXMLDataNode.append("<"+ this.attributes[ctr].name +">" + $(this.attributes[ctr]).text() + "</"+ this.attributes[ctr].name +">"   );  
          }        
        } 

有任何想法吗?还有另一种添加cdata节的方法吗?

这是源代码的示例片段…

<row 
pSiteID="4" 
pSiteTile="Test Site Name " 
pSiteURL="http://www.cnn.com"
ID="1" 
Description="<div>blah blah blah since June 2007.&amp;nbsp; T<br>&amp;nbsp;<br>blah blah blah blah&amp;nbsp; </div>" 
CreatedDate="2010-09-20 14:46:18" 
Comments="Comments example.&#10;" >

这就是我要创建的…

<Site>
<PSITEID>4</PSITEID>
<PSITETILE>Test Site Name</PSITETILE>
<PSITEURL>http://www.cnn.com</PSITEURL>
<ID>1</ID>
<DESCRIPTION><![CDATA[<div>blah blah blah since June 2007.&amp;nbsp; T<br>&amp;nbsp;<br>blah blah blah blah&amp;nbsp; </div ]]></DESCRIPTION>
<CREATEDDATE>2010-09-20 14:46:18</CREATEDDATE>
<COMMENTS><![CDATA[ Comments example.&#10;]]></COMMENTS>
</Site>
最佳答案
我遇到过同样的问题.我试图将CDATA附加到xml节点,所以我认为它像添加这样的操作一样简单:

valueNode[0].text = "<![CDATA["+ tmpVal +"]]>";
//valueNode[0] represents "<value></value>"

这不起作用,因为整个内容将被解释为文本,因此<(小于)和> (大于)将被自动替换.

您需要做的是通过执行以下操作来使用createCDATASection:

var tmpCdata = $xmlDoc[0].createCDATASection(escape("muzi test 002"));
//i'm also escaping special charactures as well
valueNode[0].appendChild(tmpCdata);

结果将是:

<value><![CDATA[muzi%20test%20002]]></value>

Brettz9(在先前的回答中)解释了如何执行此操作,但相当复杂,因此我只想添加更简单的解决方案.

谢谢,

转载注明原文:Javascript快速添加cdata节? - 代码日志