1

私はxmlの初心者です...xmlの勉強を始めたばかりです....次の疑問があります..以下は私のxmlコードです

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE book [
<!ELEMENT book (page)>
<!ELEMENT page (heading,#PCDATA)>

 ]>
<note>
<page>
    hhh<heading>c</heading><heading>s</heading>
</page>
</note>

これをブラウザーで開いたところ、#PCDATA にエラーがあることが示されました...これを PCDATA に置き換えたところ、エラーは表示されませんでした...私の DTD によると、ページには 1 つの見出し要素を含めることができます...私は右?しかし、ブラウザで開いたとき、見出し要素が2つある場合でもエラーは表示されませんでした..なぜそれが起こったのですか..また、CDATAとPCDATAの違いは何ですか....

4

2 に答える 2

4

これを使って:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note [
  <!ELEMENT note (page)>
  <!ELEMENT page (#PCDATA|heading)*>
  <!ELEMENT heading (#PCDATA)>

]>
<note>
  <page>
    hhh<heading>c</heading><heading>s</heading>
  </page>
</note>

PCDATAは、パーサーによって解析されるテキストです。テキストは、エンティティとマークアップについてパーサーによって調べられます。

CDATAは、パーサーによって解析されないテキストです。テキスト内のタグはマークアップとして扱われず、エンティティは展開されません。

于 2011-08-28T09:58:04.633 に答える
4

私のアドバイスは、確かな検証パーサーを選択することです。たとえば、AltovaXML(Community Edition)は非常に簡単に使用できます。

altovaxml -validate document.xml

DTDの何が問題になっているのか見てみましょう。まず、ドキュメント要素(ルート)に名前が付けられていないbookため、ここから最初のエラーが発生しました。

参照されたスキーマまたはDTDにエラーがあります。要素がDTDのルート要素名'book'と一致しません。

heading2つ目は、宣言されていないことです。

要素は宣言されていません。

最後に、混合コンテンツを許可するには、最初#PCDATAに(解析された文字データを意味する)と要素を選択します。heading

最後に、DTDは次のとおりです。

<!DOCTYPE note [
    <!ELEMENT note (page)>
    <!ELEMENT page (#PCDATA | heading)*>
    <!ELEMENT heading (#PCDATA)>
]>
于 2011-08-28T10:04:48.500 に答える