$text = $dom->createTextNode(iconv("gbk","utf-8","<测试>"));
$info->appendChild($text);这是代码片段,XML生成成功后右键查看源代码,< 显示为&lt; , >显示为&gt; <?xml version="1.0" encoding="gbk"?>
<notice>
   <info>&lt;[asdasdasdas]&gt;</info>
</notice>但实际上我想要的效果是这样的<?xml version="1.0" encoding="gbk"?>
<notice>
   <info><[asdasdasdas]></info>
</notice>
 
要如何解决呢?

解决方案 »

  1.   

    这样的写法在 XML 中是非法的
    <info><[asdasdasdas]></info>
    必须写成
    <info>&lt;[asdasdasdas]&gt;</info>
    这并不影响 XML 的解析如果一定要原样保留,需写作
    <info><![CDATA[<[asdasdasdas]>]]></info>但是 php 的DOM 只支持 CDATA 数据解析,而不支持 CDATA 数据生成
      

  2.   

    首先,你需要清楚你想要的是什么。
    尖括弧是xml标记这一点相信你已经很清楚了。那么,你的<[asdasdasdas]>用意是什么?它是一个标签?还是仅仅是一段文本?
    如果是标签,那么,这个标签没有结束标签,本身就是不合规范的。
    如果是文本,那么,你的代码是没有错的,输出的结果也没有任何问题。
      

  3.   

    $text = $dom->createTextNode(iconv("gbk","utf-8","<![CDATA[".$rs["NL_intro"]."]]>"));
    $text = $dom->createTextNode(iconv("gbk","utf-8","&lt;![CDATA[".$rs["NL_intro"]."]]&gt;"));
    $info->appendChild($text);项目经理给我的生成xml规范就是这样,这是我右键查看源代码的样子
    <?xml version="1.0" encoding="gbk"?>
    <notice>
      <info><![CDATA[测试]]></info>
    </notice>但是我生成之后的XML,右键查看源代码上面写的第一个text生成是这样的
    <info>&lt;![CDATA[asdasdasdas]]&gt;</info>
    第二个text生成是这样的
    <info>&amp;lt;![CDATA[asdasdasdas]]&amp;gt;</info>如果单从打开xml页面的显示上来看,是呈现这个样子
    第一个text:
     <info><![CDATA[asdasdasdas]]></info>
    第二个text:
    <info>&lt;![CDATA[asdasdasdas]]&gt;</info> 相比来说第一个text结果更接近经理给我的样本,但是他给的xml标准 双击打开<![CDATA]]更类似关键字,网页输出是呈现蓝色,而我生成的就是纯文本,<![CDATA]]是黑色的。
      

  4.   

    那是当然,因为你生成的并不是CDATA节点,是文本。
    要生成CDATA节点,你应该用createCDATASection函数而不是createTextNode