首頁  >  文章  >  Java  >  在.NET Framework中輕鬆處理XML資料(2-1)

在.NET Framework中輕鬆處理XML資料(2-1)

黄舟
黄舟原創
2016-12-20 14:05:481229瀏覽

??分析屬性值 

??大部分情況下,屬性值都是一個簡略的文字字串。然而,這並不意味著實際利用中的屬性值都是字元型的。有時候,屬性值是由很多種類型的資料組合而成的,例如Date或Boolean,這時,你就要用XmlConvert或System.Convevt類別的方法把這些類型轉換成本來的類型。 XmlConvert和System.Convevt類別都能實現資料類型的轉換,但是XmlConvert類別根據XSD中指定的資料類型轉換,而不管它現在是什麼類型。

??假設你有以下的XML資料片段: 

?? 

??讓我們先確認,birthdaay屬性值是February 8, 2001,假如你用System.Convert類別把該字串轉換成類別把該字串轉換成類別把該字串轉換成類別。 Framework中的DateTime類型,這樣,我們就可以把它當成date型別應用了。相較下,假如你用XmlConvert類別來轉換字串,你將看到一個分析錯誤,由於XmlConvert類別不能準確說明這個字串中的日期。由於在XML中,日期型資料的格局必需是YYYY-MM-DD情勢的。 XmlConvert類別擔負CLR類型與XSD類型之間的相互轉換工作。當轉換工作產生時,轉換成果是局部的。 

??在某些解決方案中,屬性值是由純文字和實體共同組成的。在所有的瀏覽器類別中,只有XmlValidatingReader類別能處理實體。 XmlTextReader固然無法處理實體,但它們同時呈現在屬性值中的時候,它只能把文字值取出來。呈現這種情況,你必需用ReadAttributeValue方法調換簡略的讀取方法來分析屬性值的內容。 

??ReadAttributeValue方法分析屬性值,然後把各個組成的要素分隔開(如把純文本和實體離開)。你可以用ReadAttributeValue方法的回傳值作為迴圈條件,遍歷全部屬性值中的要素。既然XmlTextReader類別不能處理實體,那麼你可以自己寫一個用來處理實體的類別。下面的程式碼片段示範瞭如何呼叫一個自訂的處理類別: 

??while(reader.ReadAttributeValue()) 

??{ 

??if (reader.NodeType == XmlNodeType.{ 

??if (reader.NodeType == XmlNodeType. ?// Resolve the 'reader.Name' reference and add 

??// the result to a buffer 

??buf = YourResolverCode(reader.Name); 

??else the value to the buffer 

??buf = reader.Value; 

??} 

??當屬性值全部被分析後,ReadAtributeValue方法返回False, 從而結束循環。屬性值的終極成果就是全域變數buffer的值了。 

??處理XML文本(Text) 

??當我們在處理XML標籤文字時,假如不能準確的處理,它的錯誤原因能很快地斷定。例如一個字元轉換錯誤,它必定是傳輸了非XML文字到一個XML資料流。不是所有在給定的平台中有效的字元都是有效的XML字元。只有在XML規範(www.w3.org/TR/2000/REC-xml-20001006.html)中規定的有效的字元才乾安全的用作元素和屬性名稱。 

??XmlConvert類別供給了把非XML尺度的命名轉換成尺度的XML命名的效能。當標籤名中包含有無效的XML字元時,EncodeName 和 DecodeName方法可以將它們調劑成符合Schema的XML命名。包含SQL Server™ 和Microsoft Office,這些利用程式答應及支撐Unicode文檔,然而,這些文檔中的字元有些也不是有效的XML命名。典範的情況是當你處理資料庫中包含空格的列名時。固然SQL Server答應長列名,但這對XML流來說可能不是有效的命名。空格會被十六進位代碼Invoice_0x0020_Details調換。下面的程式碼示範了程式中如何取得該字串: 

??XmlConvert.EncodeName('Invoice Details'); 

??與此相反的方法是DecodeName。此方法把XML文字轉換成原始的格局。要留意的是它只能轉換完整的十六進位代碼,只有_0x0020_才被當成一個空格,而_0x20_就不是了: 

??XmlConvert.DecodeName('Invoice_0x0020_Details');? ?在XML文件中的空格即重要也不重要。說它重要,是當它呈現在元素的內容中或它在註釋語句中時,它能表現實際意義。例如下面的情況: 



??<MyNode xml:space='preserve'>

??<!-- any space here must be preserved --> <
??; /MyNode> 

??在xml中,空格不只是代表空格(空缺),也代表回車、換行和縮排。 

??透過XmlTextReader類別的WhiteSpaceHandling屬性你可以處理空格。這個屬性接收及傳回一個WhiteSpaceHandling枚舉值(該枚舉類別有三種可選值)。預設值是All,它表現有意義和無意義的空格都會作為節點返回---- 分辨為SignificantWhitespace和Whitespace節點。 另一個枚舉值是None,它表現對任何空格都不作為節點返回。最後,就是Signficant枚舉值,它表現疏忽沒有意義的空格,而只回傳節點類型為SignficantWhitespace的節點。留意WhiteSpaceHandling屬性是少數瀏覽器屬性中的一個。它能被轉變在任何時候和給Read把持帶來影響。而Normalization及 XmlResolver屬性是「Sensitive」的。

 以上就是在.NET Framework中輕鬆處理XML資料(2-1) 的內容,更多相關內容請關注PHP中文網(www.php.cn)! 


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:JSP實作檔下載下一篇:JSP實作檔下載