是否有适用于.NET的XmlEncode / XmlDecode?

时间:2010-04-08 01:48:05

标签: .net xml web-services encoding

.NET中是否有编码解码 XML 的方法?我似乎无法找到它们,并且想知道它们为什么不在那里以及使用什么呢?

我需要对XML文档进行编码并将其传递给Web服务上的字符串参数。然后需要在另一端解码。

4 个答案:

答案 0 :(得分:8)

实际上,System.Xml.Linq中的好对象你不用担心。

我的意思是,如果您运行此代码,则不会获得运行时异常。

var element = new XElement("Name", "<Node />");

元素的值将是具有&lt;Node /&gt;的文本节点。

答案 1 :(得分:1)

如果您指的是XML名称的编码/解码,则有XmlConvert.EncodeNameDecodeName

或者您在谈论使用XmlDeclarationXDeclaration指定整个XML文档的编码/解码? (我认为这照顾了我们encoding

答案 2 :(得分:1)

如果您将XML作为字符串参数(非常糟糕的Web服务设计,BTW)传递,那么您不必执行任何操作。由Web服务来完成可能需要的任何编码。只需使用XDocument.ToString()或其他任何内容,然后将结果传递给Web服务。

答案 3 :(得分:-2)

这不是真的!

Var element As XElement = <Name><%= GetValue() %></Name>

Private Function GetValue() As String
  Return "Value with < and > as well as a " & Chr(0) & " (Nul)"
End Function

可以使用小于和大于符号,但不能使用像NUL或其他低ASCII字符这样的特殊字符(在添加字符串时但在调用ToString()或将其写入某处时不会崩溃。)

如果可读性不重要,请使用此方法:

Public Function ToXmlString(ByVal aString As String) As String
    If (aString Is Nothing) Then Return ""
    Dim myResult As New StringBuilder(aString.Length + 10)
    For Each myChar As Char In aString
        If ("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ.:,;!?-_$£{}()[]+*/\0123456789".IndexOf(myChar) > -1) Then
            myResult.Append(myChar)
        Else
            Select Case myChar
                Case "&"c
                    myResult.Append("&amp;")
                Case """"c
                    myResult.Append("&quot;")
                Case "<"c
                    myResult.Append("&lt;")
                Case ">"c
                    myResult.Append("&gt;")
                Case Else
                    myResult.Append("&#")
                    myResult.Append(AscW(myChar))
                    myResult.Append(";"c)
            End Select
        End If
    Next
    Return myResult.ToString()
End Function

在分配值之前转义值。

如果可读性很重要,请实现所有常量 http://de.selfhtml.org/html/referenz/zeichen.htm