gpt4 book ai didi

Javascript 动态添加 cdata 部分?

转载 作者:行者123 更新时间:2023-11-30 18:48:25 25 4
gpt4 key购买 nike

我在处理 xml 节点属性中存在的特殊字符时遇到问题。为了解决这个问题,我试图将属性呈现为子节点,并在必要时使用 cdata 部分来绕过特殊字符。问题是,我似乎无法将 cdata 部分正确 append 到节点。

我正在遍历源 xml 节点的属性并创建新节点。如果 attribute.name = "description"我想将 attribute.text() 放在 cdata 部分并 append 新节点。这就是我跳过轨道的地方。

     // 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 append 到 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 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com