【问题标题】:How to add html tags in CDATA of xml2js xml?如何在 xml2js xml 的 CDATA 中添加 html 标签?
【发布时间】:2015-05-21 14:38:59
【问题描述】:

我正在尝试使用 xml2js 构建一个 XML 节点。当我添加包含在 cdata 中的 html 标签时,它会创建一个单独的节点,如下所示。如果我将 CDATA 包装在 "" 内,则里面的值将变得未定义。基本上我正在尝试创建 XML 文档,我可以从中获取节点值并使用 jQuery/Angular 在 HTML 文档中显示它。并且这些节点必须能够包含 HTML 标签

var xml2js = require('xml2js');

var parser = new xml2js.Parser({
    explicitArray: false
});
var builder = new xml2js.Builder({
    cdata: true
});


var test = "<parent>![CDATA[Hey There! <span> Buddy.</span>]]</parent>"

parser.parseString(test, function(err, result) {
    var xml = builder.buildObject(result)
    console.log(xml)
});
//Output
/*
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parent>
  ![CDATA[Hey There! ]]
  <span> Buddy.</span>
</parent>
*/


var test2 = "<parent><![CDATA['Hey There! <span> Buddy.</span>']]></parent>";

parser.parseString(test, function(err, result) {
    var xml = builder.buildObject(result)
    console.log(xml)
});
//Output : 
/*
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parent><![CDATA[undefined]]></parent>
*/

【问题讨论】:

    标签: javascript xml node.js


    【解决方案1】:

    您的第一个测试几乎正确。您实际上需要 CDATA 内容周围的 符号。

    这段代码:

    var xml2js = require('xml2js');
    
    var parser = new xml2js.Parser({
        explicitArray: false
    });
    var builder = new xml2js.Builder({
        cdata: true
    });
    
    var test = "<parent><![CDATA[Hey There! <span> Buddy.</span>]]></parent>";
    
    parser.parseString(test, function(err, result) {
        var xml = builder.buildObject(result);
        console.log(xml);
    });
    

    产生这个输出:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <parent><![CDATA[Hey There! <span> Buddy.</span>]]></parent>
    

    【讨论】:

    • 嘿@trevor,看看测试号 2。它和你的一样,但我仍然得到未定义的值。
    • 我使用了您的代码并对其进行了测试。我的输出是
    • 您的测试编号 2 与我的相同,除了您在 CDATA 部分中使用的单引号(它不会真正影响任何内容)以及您将“测试”变量传递给当您应该通过“test2”时使用 parseString 函数。我发布的代码肯定会产生我发布的结果。您使用的是什么版本的 xml2js?我在我的代码中使用的是 0.4.8 版本。
    • 另请注意,仅在 24 天前创作的 CDATA 标签有一个修复:github.com/Leonidas-from-XIV/node-xml2js。我会确保 xml2js 列在您的 devDependencies 中并尝试运行 npm update。
    • 哇,伙计。非常感谢。我更新了 xml2js 并且它起作用了。当我有资格时会投票。
    【解决方案2】:

    它可以在没有解析器的情况下完成。 _ 有助于处理标签内的内部文本。

    const xml2js = require('xml2js');
    
    const builder = new xml2js.Builder({
        cdata: true
    });
    
    const test = "Hey There! <span> Buddy.</span>";
    
    const xml = builder.buildObject({
       parent: {
         _: test,
       }
    });
    
    console.log(xml);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      • 2013-07-03
      • 2023-01-30
      • 2013-11-08
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多