2

私はこのXMLと埋め込みDTDを持っています:

<?xml version="1.0" ?>
<!DOCTYPE customers [
<!ELEMENT customers (name,age,roll,sex)>
<!ELEMENT name (#CDATA)>
<!ELEMENT age (#CDATA)>
<!ELEMENT roll (#CDATA)>
<!ELEMENT sex (#CDATA)>
]>
<customers>
<name>XYZ</name>
<age>19</age>
<roll>23</roll>
<sex>M</sex>
</customers>

XMLを検証しようとすると、エラーが表示されます。しかし、#CDATAを#PCDATAに変更すると、検証は成功します。

質問1)なぜこれが起こっているのか適切な説明がありません。2つの違いは次のとおりです。#CDATAは解析されませんが、#PCDATAは解析されます。このような場合には。両方の検証が正しく成功するはずですか?この検証の出力が私の概念に反しているので、どこが間違っているのか説明してください。

よろしく、

4

2 に答える 2

3

#CDATAXMLDTDで使用できるようなものはありません。不明なキーワードです。そのため、エラーが発生します。

CDATADTDで属性を宣言するときに使用されるキーワードです。CDATA要素をタイプ(または)であると宣言することはできません#CDATA

この文字列は、まったく異なるものであるCDATACDATAセクション()にもあります。これらをXMLドキュメントで使用して、マークアップとして解釈される<![CDATA[ ... ]]>文字(など)をエスケープできます。&CDATAセクションはDTDで宣言されていません。それらは必要なときに単に使用されます。

<name>L&T</name>(CDATAセクションに含まれていない)などのマークアップがある場合、パーサーによって拒否されます。name要素がDTDでどのように宣言されているかは関係ありません。

于 2012-08-26T07:05:02.937 に答える
1

CDATAセクションは、:<![CDATA[で始まり、:で終わり]]>ます<sex><![CDATA[M]]></sex>。これは、重要な改行、特殊文字、テキスト文字列の役割でのXMLマークアップなど、XMLパーサーが解釈せずにスキップする必要があるすべてのものを含めることを目的としています。直接含めることができないのは。だけです]]>

PCDATAは、通常のプレーンテキストに対応する解析済みのCDATAです。

したがって、PCDATAは本当に必要なものです。

于 2012-08-26T05:06:31.553 に答える