六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

在.NET Framework中簡單處理XML數據(2-1)

[摘要]  分析屬性值   大部分情況下,屬性值都是一個簡單的文本字符串。然而,這并不意味著實際應用中的屬性值都是字符型的。有時候,屬性值是由許多種類型的數據組合而成的,例如Date或Boolean,這時,你就要用XmlConvert或System.Convevt類的方法把這些類型轉換成原來的類型。Xml...
  分析屬性值

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

  假設你有以下的XML數據片斷:

  

  讓我們先確認,birthdaay屬性值是February 8, 2001,如果你用System.Convert類把該字符串轉換成.NET 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.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;

  }

  當屬性值全部被分析后,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”的。



主站蜘蛛池模板: 日本中文字幕在线看 | 天堂在线最新版www中文 | 五月婷婷六月丁香在线 | 日本乱人伦片中文字幕三区 | 欧美性另类69xxxx极品 | 伊人手机在线视频 | 午夜影视在线观看免费完整高清大全 | 天天爱天天干天天 | 色噜噜狠狠色综合免费视频 | 一本久道久久综合中文字幕 | 骚妇毛片 | 在线观看黄免费 | 青青草国产免费久久久下载 | 亚洲天堂视频在线观看免费 | 日韩 亚洲 翔田千里 在线 | 日本aa网站 | 欲色影视天天一区二区三区色香欲 | 我在修仙世界朝九晚五漫画免费观看 | 日韩高清的天堂在线观看免费 | 亚洲最大毛片 | 色噜噜狠狠色综合中文字幕 | 天天操欧美 | 伊人官网 | 午夜精品久久久 | 最近韩国中文字幕更新 | 色香蕉在线观看 | 色综合久久久高清综合久久久 | 欧美在线专区 | 中文字幕三级在线不卡 | 青娱乐极品视频在线观看 | 午夜免费啪视频观看网站 | 最近免费观看高清韩国日本大全 | 四虎在线免费播放 | 四虎最新紧急更新地址 | 亚洲欧洲尹人香蕉综合 | 中文字幕国产精品 | 日韩免费视频 | 天天干天天拍天天操 | 日本一道高清不卡免费 | 亚洲乱码一二三四五六区 | 亚洲丁香|