XML html标签问题

时间:2011-02-11 16:42:47

标签: php xml formatting

HI,我有一个php脚本生成的xml outout:

<pre><code>
<menu>
<option id="67" ddmmyyyy="11 jan 2011" text="This is a text<p> ok</p> & not only a text!!" />
</menu>
</code></pre>

xml会返回错误,如何以正确的方式对其进行格式化?

3 个答案:

答案 0 :(得分:1)

编辑:

正如Shikiryu所说,你应该为你的文字使用另一个元素,如:

    <pre><code>
    <menu>    
   <option id="67" ddmmyyyy="11 jan 2011">
      <text><![CDATA[This is a text<p> ok</p> & not only a text!!"]]></text>
   </option>
    </menu>
    </code></pre>

您需要稍微更新信息的提取方式,但这是正确的方法。

CDATA标记告诉XML解析器忽略其内容。当您访问节点时,包装CDATA标签将不存在(IE您不需要做任何额外的操作来删除它)。

原始代码示例(预编辑):

<pre><code>
<menu>    
<![CDATA[<option id="67" ddmmyyyy="11 jan 2011" text="This is a text<p> ok</p> & not only a text!!" />]]>
</menu>
</code></pre>

答案 1 :(得分:0)

XML属性不能包含标记,它们只需要是文本内容。这意味着属性值中不允许使用元素,CDATA部分,注释等。否则,XML将格式良好,解析器将拒绝您的XML。

如果由于某种原因需要在属性中存储XML数据,则需要转义XML标记,将所有<个字符替换为&lt;个实体。当转义属性值时,您的示例元素应如下所示。

<option id="67" ddmmyyyy="11 jan 2011" text="This is a text &lt;p&gt; ok&lt;/p&gt; &amp; not only a text!!" />

另请注意&amp;不允许使用字符,它总是需要转义为&amp;。转义属性值还意味着解析器不会将其内容作为包含元素的标记返回,而是将其作为包含例如<个字符的文本字符串返回。这需要在解释此属性值的代码中加以考虑。

如果要将数据保留为XML结构,则应将数据表示为元素和文本内容,而不是属性值。

答案 2 :(得分:0)

更改脚本以使用XML工具链(例如DOMSimple)构建XML。不要试图通过将字符串拼接在一起来构建它。