亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

XML簡易教程之二

2019-11-18 20:01:50
字體:
來源:轉載
供稿:網友

文檔格式的排錯
我媽媽_的清單中有數十條菜譜,甚至數百條。如果產生一個致
命錯誤,排錯將非常困難 - 你將一行一行地尋找丟失的標記
符。如果使用幾層嵌套,發現錯誤將很困難。

但是可以找到很好的幫助。分析器 - xml代碼和報告格式錯誤
的應用程序可以在網上免費得到。其中最好的是Lark,它的作
者是由Tim Bray - XML規范的技術編輯和極力鼓吹者,地球上最
聰明的人之一。

我用Lark分析下面的代碼。注意"chocolate ch標記符出現在</ingredients> 標記符中的位置有錯誤:

<?xml version="1.0"?>

<list>

<recipe>

<author>Carol Schmidt</author>

<recipe_name>Chocolate Chip Bars</recipe_name>

<meal>Dinner

<course>Dessert</course>

</meal>

<ingredients>

<item>2/3 C butter</item>

<item>2 C brown sugar</item>

<item>1 tsp vanilla</item>

<item>1 3/4 C unsifted all-purpose flour</item>

<item>1 1/2 tsp baking powder</item>

<item>1/2 tsp salt</item>

<item>3 eggs</item>

<item>1/2 C chopped nuts</item>

<item>

</ingredients>2 cups (12-oz pkg.) semi-sweet choc.

chips</item>

<directions>

PReheat overn to 350 degrees. Melt butter;

combine with brown sugar and vanilla in large mixing bowl.

Set aside to cool. Combine flour, baking powder, and salt; set aside.

Add eggs to cooled sugar mixture; beat well. Stir in reserved dry

ingredients, nuts, and chips.

Spread in greased 13-by-9-inch pan. Bake for 25 to 30 minutes

until golden brown; cool. Cut into squares.

</directions>

</recipe>

</list>

下面是分析器返回的結果:

Error Report

Line 17, column 22: Encountered </ingredients> expected </item>

... assumed </item>

Line 18, column 36: Encountered </item> with no start-tag.

有了這種信息,找到錯誤將不會成為問題。那么XML文件的有效性
是指什么呢?

實現有效性
最終我們將在組織良好的XML文檔中加入信息。實際上,我們
有很多事要做 - 仍然有危機潛伏 - 雖然XML文件組織良好,
但還可能丟失關鍵信息??纯聪旅娴睦樱?/P>

<recipe>
<author>Carol Schmidt</author>
<recipe_name>Chocolate Chip Bars</recipe_name>
<meal>Dinner <course>Dessert</course> </meal>
<ingredients> </ingredients>
<directions>Melt butter; combine with, etc. ... </directions>
</recipe>
這份菜譜中沒有包含ingredient,而且因為它組織良好,所以
Lark分析器也不會發現問題。管理過哪怕是最和善的數據庫
人都知道我們人類常犯的錯誤:如果有機會,我們會丟掉關鍵
信息并加入無用的廢話。這就是為什么XML的發明者引入DTD -
文檔類型定義(Document Type Definition)。DTD提供了一種保
證XML或多或少是你所想的方法。

讓我們看看用在菜譜上的一個DTD。

<!DOCTYPE list [
<!ELEMENT recipe (recipe_name, author, meal, ingredients, directions)>
<!ELEMENT ingredients (item+)>
<!ELEMENT meal (#PCDATA, course?)>
<!ELEMENT item (#PCDATA, sub_item*)>
<!ELEMENT recipe_name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT item (#PCDATA)>
<!ELEMENT subitem (#PCDATA)>
<!ELEMENT directions (#PCDATA)>
]>
這些代碼起初看起來不夠友好,但當把它分解時卻能看出其中
的意義。讓我們詳細解釋之:

<!DOCTYPE list [

這行是說,包含在方括號中的是具有根元素<list>的某個文檔的
DTD。如我們以前提到的,根元素包含所有其它元素。

<!ELEMENT recipe (recipe_name, meal, ingredients, directions)>

這行定義了<recipe>標記符。圓括號是說其中的四種標記符必
須按照順序出現在<recipe>標記符中。

<!ELEMENT meal (#PCDATA, course?)>

這行需要詳細的解釋。我定義了以下的結構:

<meal>Here the meal name is mandatory
<course>One course name may appear, but it is not
mandatory</course>
</meal>
我這樣做是因為,按照我的想法,午餐不一定特定某道菜,但
是晚餐可能要指出開胃食品、主菜和餐后甜點。通過指定
#PCDATA - 表示經過分析的字符數據(即非二進制數據)來
實現這個功能。這里,#PCDATA是文本 - 例如,“dinner”。

"course"后面的問號表示0或1對<course>標記符將出現在<meal>
標記符內。

現在讓我們看看下一行:

<!ELEMENT ingredients (item+)>

這里的加號表示至少有一對<item>標記符應出現在<ingredients>
標記符內。

我們感興趣的最后一行是:

<!ELEMENT item (#PCDATA, sub_item*)>

我把sub_item*作為一項安全措施。除了要求每個item的文本之
外,我希望計算每個item的內容的數量。星號是說在<item>標記
符中可以有子條目的數目。我不需要Chocolate Chip Bars菜譜的
任何子條目,但是當它的組成成分很復雜時就用得著。

現在讓我們把這些放在一起看看我們能得到什么。

DTD的完整例子
下面是一個完整的例子。我把另一個菜譜加入文件內,并為
DTD做了注釋??梢宰⒁獾轿以诘诙€菜譜中用到子條目。

<?xml version="1.0"?>
<!--This starts the DTD. The first four lines address document structure-->
<!DOCTYPE list ][
<!ELEMENT recipe (recipe_name, author, meal, ingredients,directions)>
<!ELEMENT ingredients (item+)>
<!ELEMENT meal (#PCDATA, course?)>
<!ELEMENT item (#PCDATA, sub_item*)>
<!--These are the remaining elements of the recipe tag -->
<!ELEMENT recipe_name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT directions (#PCDATA)>
<!--The remaining element of the meal tag -->
<!ELEMENT course (#PCDATA)>
<!--The remaining element of the item tag -->
<!ELEMENT sub_item (#PCDATA)>
]>
 

<?xml version="1.0"?>
<list>
<recipe>
<author>Carol Schmidt</author>
<recipe_name>Chocolate Chip Bars</recipe_name>
<meal>Dinner
<course>Dessert</course>
</meal>
<ingredients>
<item>2/3 C butter</item>
<item>2 C brown sugar</item>
<item>1 tsp vanilla</item>
<item>1 3/4 C unsifted all-purpose flour</item>
<item>1 1/2 tsp baking powder</item>
<item>1/2 tsp salt</item>
<item>3 eggs</item>
<item>1/2 C chopped nuts</item>
<item>2 cups (12-oz pkg.) semi-sweetchoc. chips</item>
</ingredients>
<directions>
Preheat oven to 350 degrees. Melt butter;
combinewith brown sugar and vanilla in large mixing bowl.
Set aside to cool. Combine flour, baking powder, andsalt;
set aside.Add eggs to cooled sugar mixture; beat well.
Stir in reserved dry ingredients, nuts, and chips.
Spread in greased 13-by-9-inch pan.
Bake for 25 to 30minutes until golden brown; cool.
Cut into squares.
</directions>
</recipe>
<recipe>
<recipe_name>Pasta with tomato Sauce</recipe_name>
<meal>Dinner
<course>Entree</course>
</meal>
<ingredients>
<item>1 lb spaghetti</item>
<item>1 16-oz can diced tomatoes</item>
<item>4 cloves garlic</item>
<item>1 diced onion</item>
<item>Italian seasoning
<sub_item>oregano</sub_item>
<sub_item>basil</sub_item>
<sub_item>crushed red pepper</sub_item>
</item>
</ingredients>
<directions>
Boil pasta. Sauté garlic and onion.
Add tomatoes.Serve hot.
</directions>
</recipe>
</list>
既然有DTD,文檔將被檢查看是否符合DTD做出的限制。換句話
說,我們要保證文檔的有效性。

為了達到這個目的,我們需要另一個工具:有效性分析器。微軟
的MSXML,一個基于java的程序,使用容易又工作得很好。上面的
文檔經過這個程序的檢查后沒有發現錯誤。但是如果我檢查一個
ingredient標記符中沒有包含條目的菜譜,將會返回以下信息:

ingredients is not complete. Expected elements [item].


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美二区乱c黑人| 性色av一区二区三区红粉影视| 日韩精品福利网站| 国产精品69av| 国产精品永久免费| 亚洲精品成人久久电影| 91欧美激情另类亚洲| 亚洲aⅴ日韩av电影在线观看| 久久亚洲国产精品成人av秋霞| 色偷偷偷亚洲综合网另类| 欧洲美女7788成人免费视频| yw.139尤物在线精品视频| 亚洲一区亚洲二区亚洲三区| 国产亚洲精品激情久久| 日韩亚洲国产中文字幕| 日韩大片免费观看视频播放| 精品国产欧美一区二区五十路| 成人高清视频观看www| 亚洲黄色成人网| 久久躁日日躁aaaaxxxx| 国产一区二区三区高清在线观看| 69av在线视频| 国产欧美精品在线播放| 性欧美在线看片a免费观看| 亚洲精品免费在线视频| 欧美性在线视频| 国产欧美最新羞羞视频在线观看| 国产成人免费av电影| 亚洲欧美综合另类中字| 欧美在线日韩在线| …久久精品99久久香蕉国产| 日韩欧亚中文在线| 色七七影院综合| 亚州精品天堂中文字幕| 精品国产拍在线观看| 中文字幕精品久久| 亚洲精品久久久久久久久久久| 久久久久国产一区二区三区| 久久久亚洲精选| 超在线视频97| 高清在线视频日韩欧美| 成人黄色免费看| 青青草成人在线| 欧美亚洲另类在线| 91爱爱小视频k| 欧美激情精品久久久久久| 亚洲天堂av高清| 人妖精品videosex性欧美| 国产精品旅馆在线| 国产精自产拍久久久久久| 国产精品美女在线观看| 欧美中文在线观看国产| 国产精品人人做人人爽| 在线不卡国产精品| 久久亚洲精品一区| 国产美女91呻吟求| 精品成人69xx.xyz| 久热精品视频在线观看一区| 亚洲国产精品专区久久| 久久亚洲精品中文字幕冲田杏梨| 亚洲欧洲美洲在线综合| 精品中文字幕在线| 日本欧美在线视频| 久久精品小视频| 九九久久久久99精品| 8050国产精品久久久久久| 亚洲精品一区二三区不卡| 久久久久久高潮国产精品视| 日韩成人网免费视频| 久久久亚洲影院你懂的| 亚洲国产精品一区二区久| 国产精品久久久久久久app| 亚洲影视中文字幕| 91高清视频在线免费观看| 国产精品 欧美在线| 成人www视频在线观看| 国产欧美日韩专区发布| 日韩小视频在线观看| 欧美极品美女电影一区| 国产www精品| 亚洲黄色片网站| 中文字幕在线看视频国产欧美| 国内免费精品永久在线视频| 国产精品情侣自拍| 久久影院资源站| 亚洲女同性videos| 成人精品福利视频| 黑人巨大精品欧美一区免费视频| 91精品国产91久久久久久最新| 亚洲人成啪啪网站| 情事1991在线| 亚洲精品99久久久久中文字幕| 亚洲国语精品自产拍在线观看| 国产欧美精品xxxx另类| 久久影视免费观看| 精品久久久久久久久久久久久| 伊人久久久久久久久久久| 亚洲自拍小视频免费观看| 亚洲欧美日韩在线高清直播| 海角国产乱辈乱精品视频| 亚洲欧美国产制服动漫| 国产精品久久久久久中文字| 欧美极品少妇xxxxⅹ喷水| 欧洲美女免费图片一区| 欧美性xxxxx极品| 亚洲人成电影在线观看天堂色| 国精产品一区一区三区有限在线| 久久九九全国免费精品观看| 91精品中文在线| 午夜欧美不卡精品aaaaa| 久久综合88中文色鬼| 亚洲精品aⅴ中文字幕乱码| 91久久在线视频| 伊人伊成久久人综合网小说| 欧美在线视频播放| 久久精品国产亚洲一区二区| 国产精品入口日韩视频大尺度| 久久电影一区二区| 精品丝袜一区二区三区| 亚洲娇小xxxx欧美娇小| 欧美精品在线免费播放| 国产精品三级久久久久久电影| 久久久爽爽爽美女图片| www.国产精品一二区| 福利微拍一区二区| 久久久久久国产三级电影| 中文字幕国产日韩| 欧美电影《睫毛膏》| 精品久久久久久久大神国产| 国产69精品久久久久久| 欧美在线一区二区视频| 日韩精品欧美激情| 亚洲男人第一av网站| www国产精品com| 亚洲自拍欧美色图| 一区二区欧美日韩视频| 国产精品成人久久久久| 欧美精品在线观看91| 国产97在线|日韩| 欧美老少做受xxxx高潮| 成人日韩在线电影| 亚洲第一色中文字幕| www.久久色.com| 久久久97精品| 欧美国产在线电影| 久久亚洲私人国产精品va| 超碰日本道色综合久久综合| 福利二区91精品bt7086| 国产午夜精品麻豆| 欧美午夜激情视频| 欧美午夜精品久久久久久久| 欧美精品九九久久| 国产亚洲精品高潮| 91社区国产高清| 亚洲午夜未满十八勿入免费观看全集| 96pao国产成视频永久免费| 97久久超碰福利国产精品…| 欧美激情性做爰免费视频| 久久亚洲精品国产亚洲老地址| 成人黄色生活片| 麻豆成人在线看| x99av成人免费| 日本高清+成人网在线观看| 懂色av一区二区三区|