人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

在.NET Framework中簡(jiǎn)單處理XML數(shù)據(jù)(2-1)

在.NET Framework中簡(jiǎn)單處理XML數(shù)據(jù)(2-1)

更新時(shí)間:2022-08-23 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

分析屬性值

大部分情況下,屬性值都是一個(gè)簡(jiǎn)單的文本字符串。然而,這并不意味著實(shí)際應(yīng)用中的屬性值都是字符型的。有時(shí)候,屬性值是由許多種類型的數(shù)據(jù)組合而成的,例如Date或Boolean,這時(shí),你就要用XmlConvert或System.Convevt類的方法把這些類型轉(zhuǎn)換成原來的類型。XmlConvert和System.Convevt類都能實(shí)現(xiàn)數(shù)據(jù)類型的轉(zhuǎn)換,但是XmlConvert類依據(jù)XSD中指定的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,而不管它現(xiàn)在是什么類型。

假設(shè)你有以下的XML數(shù)據(jù)片斷:



讓我們先確認(rèn),birthdaay屬性值是February 8, 2001,如果你用System.Convert類把該字符串轉(zhuǎn)換成.NET Framework中的DateTime類型,這樣,我們就可以把它當(dāng)成date類型使用了。相比下,如果你用XmlConvert類來轉(zhuǎn)換字符串,你將看到一個(gè)分析錯(cuò)誤,因?yàn)閄mlConvert類不能正確解釋這個(gè)字符串中的日期。因?yàn)樵赬ML中,日期型數(shù)據(jù)的格式必須是YYYY-MM-DD形式的。XmlConvert類擔(dān)任CLR類型與XSD類型之間的相互轉(zhuǎn)換工作。當(dāng)轉(zhuǎn)換工作發(fā)生時(shí),轉(zhuǎn)換結(jié)果是局部的。

在某些解決方案中,屬性值是由純文本和實(shí)體共同組成的。在所有的閱讀器類中,只有XmlValidatingReader類能處理實(shí)體。XmlTextReader雖然不能處理實(shí)體,但它們同時(shí)出現(xiàn)在屬性值中的時(shí)候,它只能把文本值取出來。出現(xiàn)這種情況,你必須用ReadAttributeValue方法替代簡(jiǎn)單的讀方法來分析屬性值的內(nèi)容。

ReadAttributeValue方法分析屬性值,然后把各個(gè)組成的要素分隔開(如把純文本和實(shí)體分開)。你可以用ReadAttributeValue方法的返回值作為循環(huán)條件,遍歷整個(gè)屬性值中的要素。既然XmlTextReader類不能處理實(shí)體,那么你可以自己寫一個(gè)用于處理實(shí)體的類。下面的代碼片斷演示了怎么調(diào)用一個(gè)自定義的處理類:

while(reader.ReadAttributeValue())

{

if (reader.NodeType == XmlNodeType.EntityReference)

// Resolve the "reader.Name" reference and add

// the result to a buffer

buf += YourResolverCode(reader.Name);

else

// Just append the value to the buffer

buf += reader.Value;

}

當(dāng)屬性值全部被分析后,ReadAtributeValue方法返回False, 從而結(jié)束循環(huán)。屬性值的最終結(jié)果就是全局變量buffer的值了。

處理XML文本(Text)

當(dāng)我們?cè)谔幚鞽ML標(biāo)簽文本時(shí),如果不能正確的處理,它的錯(cuò)誤原因能很快地確定。例如一個(gè)字符轉(zhuǎn)換錯(cuò)誤,它必然是傳輸了非XML文本到一個(gè)XML數(shù)據(jù)流中。不是所有在給定的平臺(tái)中有效的字符都是有效的XML字符。只有在XML規(guī)范(www.w3.org/TR/2000/REC-xml-20001006.html)中規(guī)定的有效的字符才能安全的用作元素和屬性名。

XmlConvert類提供了把非XML標(biāo)準(zhǔn)的命名轉(zhuǎn)換成標(biāo)準(zhǔn)的XML命名的功能。當(dāng)標(biāo)簽名中包含有無效的XML字符時(shí),EncodeName 和 DecodeName方法能把它們調(diào)整成符合Schema的XML命名。包括SQL Server™ 和Microsoft Office,這些應(yīng)用程序允許及支持Unicode文檔,然而,這些文檔中的字符有些也不是有效的XML命名。典型的情況是在你處理數(shù)據(jù)庫中包含空格的列名時(shí)。雖然SQL Server允許長(zhǎng)列名,但這對(duì)XML流來說可能就不是有效的命名。空格會(huì)被十六進(jìn)制代碼Invoice_0x0020_Details替代。下面的代碼演示了怎么樣在程序中獲得該字符串:

XmlConvert.EncodeName("Invoice Details");

與此相反的方法是DecodeName。該方法把XML文本轉(zhuǎn)換成其原始的格式。要注意的是它只能轉(zhuǎn)換完整的十六進(jìn)制代碼,只有_0x0020_才被當(dāng)成一個(gè)空格,而_0x20_就不是了:

XmlConvert.DecodeName("Invoice_0x0020_Details");

在XML文檔中的空格即重要也不重要。說它重要,是當(dāng)它出現(xiàn)在元素的內(nèi)容中或者它在注釋語句中時(shí),它能表示實(shí)際意義。例如下面的情況:



<MyNode xml:space="preserve">

<!-- any space here must be preserved -->

•••

</MyNode>

在xml中,空格不只是代表空格(空白),也代表回車、換行和縮進(jìn)。

通過XmlTextReader類的WhiteSpaceHandling屬性你可以處理空格。這個(gè)屬性接受及返回一個(gè)WhiteSpaceHandling枚舉值(該枚舉類有三種可選值)。默認(rèn)值是All,它表示有意義和無意義的空格都會(huì)作為節(jié)點(diǎn)返回---- 分別為SignificantWhitespace和Whitespace節(jié)點(diǎn)。 另一個(gè)枚舉值是None,它表示對(duì)任何空格都不作為節(jié)點(diǎn)返回。最后,就是Signficant枚舉值,它表示忽略沒有意義的空格,而只返回節(jié)點(diǎn)類型為SignficantWhitespace的節(jié)點(diǎn)。注意WhiteSpaceHandling屬性是少數(shù)閱讀器屬性中的一個(gè)。它能被改變?cè)谌魏螘r(shí)候和給Read操作帶來影響。而Normalization及 XmlResolver屬性是“Sensitive”的。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 镇巴县| 永仁县| 婺源县| 寻乌县| 那曲县| 大英县| 炉霍县| 卢氏县| 婺源县| 花莲县| 贡觉县| 盐山县| 普格县| 高邮市| 安国市| 陇南市| 安远县| 汉中市| 长顺县| 富蕴县| 兴国县| 汉川市| 宜兰市| 陵川县| 玉林市| 台南市| 岳西县| 揭东县| 若尔盖县| 邛崃市| 班戈县| 布拖县| 浦北县| 抚远县| 平原县| 南康市| 洛南县| 怀化市| 三门县| 和平县| 旌德县|