2016-07-07 57 views
1

我已經和確定年代,並在該專欄中,我把內容類型DDL有些像的getXML指定選項序列化列內容因爲CDATA

  • 創建表
  • 創建視圖
  • 字符串數據類型的列
  • 創建存儲過程

    dt.columns("content") = "create procedure ...etc" 
    

是工作確定,

問題是當我需要恢復像xml這樣的內容。現在我做到這一點與

Dim xmlcontent = dt.DataSet.GetXml().ToString() 

返回像

<NewDataSet> 
<Application_table> 
<ID>PV</ID> 
<NAme>dbo.uvw_Sample</Nombre> 
<Content>/* 
Run this script on SQL Server 2008 or later. There may be flaws if running on earlier versions of SQL Server. 
*/ 
Create View... 
... 
</Content> 
</Application_table> 
</NewDataSet> 

一個xml的例外是

XML parsing: line 5349, character 59, illegal xml character 

我覺得在欄目內容的內容例如應當改變「<」爲"&lt;"或更好地指定內容如cdata

所以我想指定該列的序列化爲CDATA。任何人都知道是否有辦法做到這一點?

回答

0

您可以嘗試在問題轉換節點到節點CDATA。這個代碼可能已經過時了,因爲它很古老,但它仍然有效。我從數據集中創建了一個xml文檔。將所有文本節點更改爲CDATA節點。下面是代碼:

workingds = DataSetWithData 
'Convert dataset to xmldatadocument 
Dim myxmldoc As Xml.XmlDataDocument = New Xml.XmlDataDocument(workingds) 

    txtnodes = myxmldoc.GetElementsByTagName(strTextField) 
    For i = 0 To txtnodes.Count - 1 
     Me.makecdata(txtnodes(i)) 
    Next i 
'this subroutine takes the text node and wraps a cdata tag around it 
'and returns it to the document 
Public Sub makecdata(ByVal mynode As Xml.XmlNode) 
    Dim mcnode As Xml.XmlCDataSection, strtemp As String 
    strtemp = mynode.InnerText 

    mcnode = (mynode.OwnerDocument.CreateCDataSection(strtemp)) 

    mynode.InnerXml = "" 
    mynode.AppendChild(mcnode) 

    mcnode = Nothing 

End Sub 
+0

感謝海姆·卡茨,我解決了GET字符串後做,循環和更換節點內容,你的建議更好看 –

0

使用序列:

private string DataSetToXml(DataSet ds) 
     { 
      using (var ms= new MemoryStream()) 
      { 
       using (TextWriter sw= new StreamWriter(ms)) 
       { 
        var xmlSerializer = new XmlSerializer(typeof(DataSet)); 
        xmlSerializer.Serialize(sw, ds); 
        return Encoding.UTF8.GetString(memoryStream.ToArray()); 
       } 
      } 
     } 

,或者您可以使用.getXml()返回的XML瑟您如何序列化爲字符串Using StringWriter for XML Serialization