首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET Framework 輕鬆處理 XML 數據(二):屬性值深度解析與 XML 片段處理技巧

     編輯:關於.NET

屬性值類型轉換

屬性值常為字串,但實際可能包含 Date、Boolean 等類型。需轉換為原生類型使用。

XmlConvert vs System.Convert

  • System.Convert:依當前文化特性解析,如 "February 8, 2001" 可轉 DateTime
  • XmlConvert:嚴格依 XSD 規範,日期必須為 "YYYY-MM-DD" 格式,上例會解析失敗
  • XmlConvert 專司 CLR 與 XSD 類型雙向轉換,結果為局部有效

混合內容屬性值處理

屬性值含純文字與實體時,唯有 XmlValidatingReader 能處理實體。XmlTextReader 僅能提取文字部分。

ReadAttributeValue 逐元素解析

while (reader.ReadAttributeValue())
{
    if (reader.NodeType == XmlNodeType.EntityReference)
        buf += YourResolverCode(reader.Name);  // 自訂實體解析
    else
        buf += reader.Value;  // 純文字直接追加
}

返回 false 結束循環,buffer 即完整屬性值。

XML 文字內容處理與編碼

非 XML 標準字符會導致轉換錯誤。只有 W3C XML 規範定義的有效字符可用於元素/屬性名。

XmlConvert 編碼/解碼

// 空格編碼為 _x0020_
XmlConvert.EncodeName("Invoice Details");  // "Invoice_x0020_Details"
// 解碼還原(需完整十六進制碼)
XmlConvert.DecodeName("Invoice_x0020_Details");  // "Invoice Details"

空白字符處理策略

XML 中空白包含空格、換行、縮進。XmlTextReader.WhiteSpaceHandling 屬性控制:

枚舉值行為
All(預設)有意義/無意義空白皆作為節點返回
None忽略所有空白
Significant僅返回 SignificantWhitespace 節點

xml:space="preserve" 可強制保留元素內空白。WhiteSpaceHandling 可隨時修改影響後續 Read,屬少數可動態調整的閱讀器屬性。

字串與片段處理

.NET 無 LoadXML 直接從字串創建閱讀器,但可用 StringReader 橋接:

string xmlText = "...";
StringReader strReader = new StringReader(xmlText);
XmlTextReader reader = new XmlTextReader(strReader);

同理 StringWriter 可用於記憶體中創建 XML。

XML 片段

無根節點的 XML 文字為片段,非格式良好文檔。.NET 支援結合 XmlParserContext 解析片段:

public XmlTextReader(
    string xmlFragment,
    XmlNodeType fragType,  // Element/Attribute/Document
    XmlParserContext context  // encoding、DTD、命名空間、語言、空白處理
);

範例片段:<author>Dino</author><author>Esposito</author>(無根節點)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved