1

xmllint を使用して DTD ファイルをチェックすると、エラー メッセージが表示されます。以下の出力を参照してください。これがどこでうまくいかなかったのか正確にはわかりません。

book.dtd:1: parser error : StartTag: invalid element name
<!ELEMENT books_for_sale (book+)>
 ^
book.dtd:1: parser error : Extra content at the end of the document
<!ELEMENT books_for_sale (book+)>
 ^

ここに私のDTDファイルがあります

<!ELEMENT books_for_sale (book+)>
<!ELEMENT book (book_id, title, author, co_author_name, editor_name, illustrator_name, language, ISBN, publisher, publisher_date, genre, subject, category, file_size, pages, price, payment_method)>
<!ELEMENT book_id (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT co_author_name (#PCDATA)>
<!ELEMENT editor_name (#PCDATA)>
<!ELEMENT illustrator_name (#PCDATA)>
<!ELEMENT language (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT publisher_date (#PCDATA)>
<!ELEMENT genre (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT category (#PCDATA)>
<!ELEMENT file_size (#PCDATA)>
<!ELEMENT pages (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT payment_method (#PCDATA)>

html と xml の組み合わせが適切に行われているかどうかは不明です。これを整理するために名前空間を使用してみました。しかし、これはすべて私にとって初めてのことなので、正しく書かれているかどうかはわかりません。

<?xml version="1.0"  encoding="utf-8"?>

<!DOCTYPE books_for_sale SYSTEM "book.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:BO="http://resumator3000.com">

<!-- list book inventory -->

<head>
<title>Book Order</title>
<link rel="stylesheet" type="text/css" href="book.css"></link>
</head>
<body>

<div class="page-wrap">

<h3>Books for Sale</h3>
<h4>Great Prices! Limted Selection! No Delivery!</h4>

<!-- present books for sale -->
<BO:books_for_sale>

    <BO:book>
        <p>Book ID: <BO:book_id>BK12345</BO:book_id></p>
        <p>Book Title: <BO:title>Gray Geese Crying</BO:title></p>
        <p>Author: <BO:author>Bill Nedham</BO:author></p>
        <p>Co-Author: <BO:co_author_name>Surely Joking</BO:co_author_name></p>
        <p>Editor: <BO:editor_name>Fried Brian</BO:editor_name></p>
        <p>Illustrator: <BO:illustrator_name>Drew Sumthin</BO:illustrator_name></p>
        <p>Language: <BO:language>Orangatang</BO:language></p>
        <p>ISBN: <BO:ISBN>9912385748391</BO:ISBN></p>
        <p>Publisher: <BO:publisher>Random Random Homes</BO:publisher></p>
        <p>Publish Date: <BO:publisher_date>2001</BO:publisher_date></p>
        <p>Genre: <BO:genre>Poetry</BO:genre></p>
        <p>Subject: <BO:subject>Human Mind</BO:subject></p>
        <p>Category: <BO:category>Self-Help</BO:category></p>
        <p>File Size: <BO:file_size>122 MB</BO:file_size></p>
        <p>Pages: <BO:pages>3</BO:pages></p>
        <p>Price: <span id="dollar">$</span><BO:price>142.99</BO:price></p>
        <p>Payment Method: <BO:payment_method>Paypal</BO:payment_method></p>
    </BO:book>  

</BO:books_for_sale>
</div>

</body>
</html>

これがどこで間違っているのかわかりません。

4

1 に答える 1

1

あなたのDTDは問題ありませんが、直接チェックすることはできませんxmllint; XML ファイルをチェックする必要があります。

他のファイルに問題があります。XML を分割する必要があります。DTD を使用しているため、名前空間を使用しないでください。(DTD を書き直して、名前空間宣言を属性として扱い、プレフィックス付きの要素を完全な名前として扱うこともできますが、XML では名前空間宣言は属性ではなく、任意の要素に表示でき、プレフィックスは任意です。したがって、概念は変換されません。良い。)

もう 1 つの問題は、HTML レンダリングが非標準タグを無視するため、ドキュメントの本文全体が取り出されることです。XML から HTML (XHTML も含む) にデータを転送する場合は、レンダリングするデータを HTML タグに入れるようにしてください。これは XSLT で行うことができます。

XML ファイル...

<?xml version="1.0"  encoding="utf-8"?>
<!DOCTYPE books_for_sale SYSTEM "book.dtd">
<books_for_sale>
    <book>
        <book_id>BK12345</book_id>
        <title>Gray Geese Crying</title>
        <author>Bill Nedham</author>
        <co_author_name>Surely Joking</co_author_name>
        <editor_name>Fried Brian</editor_name>
        <illustrator_name>Drew Sumthin</illustrator_name>
        <language>Orangatang</language>
        <ISBN>9912385748391</ISBN>
        <publisher>Random Random Homes</publisher>
        <publisher_date>2001</publisher_date>
        <genre>Poetry</genre>
        <subject>Human Mind</subject>
        <category>Self-Help</category>
        <file_size>122 MB</file_size>
        <pages>3</pages>
        <price>142.99</price>
        <payment_method>Paypal</payment_method>
    </book>  
</books_for_sale>

したがって、HTML を生成する場合は、次のようなスタイルシートを使用します: XSLT ファイル...

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<head>
<title>Book Order</title>
<link rel="stylesheet" type="text/css" href="book.css"></link>
</head>
<body>

<div class="page-wrap">

<h3>Books for Sale</h3>
<h4>Great Prices! Limted Selection! No Delivery!</h4>

<!-- present books for sale -->
      <xsl:for-each select="books_for_sale/book">
        <div>
            <p>Book ID: <xsl:value-of select="book_id" /></p>
            <p>Price: <span id="dollar">$<xsl:value-of select="price" /></span></p>
            <p>Payment Method: <xsl:value-of select="payment_method" /></p>
        </div>
      </xsl:for-each>
    </div>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>
于 2013-04-08T03:05:05.297 に答える