Analytics

2014年10月1日 星期三

[XML]解決 An Invalid character was found in text content. (Resolve An Invalid character was found in text content.)


問題
An Invalid character was found in text content.



解決方法
The following are the character ranges for low-order non-printable ASCII characters that are rejected by MSXML versions 3.0 and later:

#x0 - #x8 (ASCII 0 - 8)
#xB - #xC (ASCII 11 - 12)
#xE - #x1F (ASCII 14 - 31)
以上定義說明了在XML理不支援的ASCII,因此解決方式有2種: 先將不支援的ASCII列出
Private Function AsciiLowOrderList() As List(Of Char)
        Dim filter As List(Of Char) = New List(Of Char)
        For i As Integer = 0 To 31
            If i <> 9 Or i <> 10 Or i <> 13 Then
                filter.Add(Chr(i))
            End If
        Next

        Return filter

    End Function
1.轉成CHAR,再逐一比對
    Private Function AsciiLowOrderFilterByChr(ByVal strVal As String) As String
        Dim chrs As Char() = strVal.ToCharArray()

        Dim buffer As StringBuilder = New StringBuilder(strVal.Length)

        Dim filter As List(Of Char) = AsciiLowOrderList()
        For Each chr As Char In chrs
            If filter.Contains(chr) = False Then
                buffer.Append(chr)
            End If
        Next

        Return buffer.ToString()
    End Function
2.採用REPLACE方式避開此問題
    Private Function AsciiLowOrderFilterByReplace(ByVal strVal As String) As String
        For Each chr As Char In AsciiLowOrderList()
            strVal = strVal.Replace(chr,string.Empty)
        Next

        Return strVal

    End Function

沒有留言:

熱門文章