2017-07-27 67 views
0

這是使用C#的第一次。由於ADO xml格式的使用,我製作了一個程序,每10分鐘從串行COM端口接收XML數據。C#2根元件拆分ADO XML字符串插入2個文件

接收到數據時我得到我已經把下面當我嘗試讀取這個文件我得到多個根元素

錯誤

sBuffer擁有所有一個例子的2個XML文件中的COM端口的字符串

我的問題XML數據,目前把它寫到data.xml中 我想一些幫助sBuffer字符串分割成兩個部分,每個XML保存爲

C:\ DATA \ data1.xml作爲

C:\數據\ data2.xml

C#

private Task processData(string sBuffer) 
    { 
     Console.WriteLine("NEW DATA");   

     string filePath = @"C:\Data\data.xml"; 
     string text = sBuffer; 

     return WriteTextAsync(filePath, text); 
    } 

XML

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" 
    xmlns:rs="urn:schemas-microsoft-com:rowset" 
    xmlns:z="#RowsetSchema"> 
    <s:Schema id="RowsetSchema"> 
    <s:ElementType name="row" content="eltOnly"> 
    <s:AttributeType name="ShipperID"/> 
    <s:AttributeType name="CompanyName"/> 
    <s:AttributeType name="Phone"/> 
    <s:Extends type="rs:rowbase"/> 
    </s:ElementType> 
    </s:Schema> 
    <rs:data> 
    ... 
    </rs:data> 
</xml> 
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" 
    xmlns:rs="urn:schemas-microsoft-com:rowset" 
    xmlns:z="#RowsetSchema"> 
    <s:Schema id="RowsetSchema"> 
    <s:ElementType name="row" content="eltOnly"> 
    <s:AttributeType name="ShipperID"/> 
    <s:AttributeType name="CompanyName"/> 
    <s:AttributeType name="Phone"/> 
    <s:Extends type="rs:rowbase"/> 
    </s:ElementType> 
    </s:Schema> 
    <rs:data> 
    ... 
    </rs:data> 
</xml> 
+0

如您收到的數據,您應該拆分數據。在輸入中搜索字符串:<"/xml">,然後寫入文件並打開新文件。 – jdweng

回答

0

您可以通過<wrapper>標籤包裝你的數據,或者使用XML閱讀器配置:

 var settings = new XmlReaderSettings(); 
     settings.ConformanceLevel = ConformanceLevel.Fragment; 
     using (XmlReader reader = XmlReader.Create(filePath, settings)) 
     { 
      while (reader.Read()) 
      { 
       if (reader.Name.Equals("xml")) 
       { 

       } 
      } 
     } 
+0

很抱歉,這並不能幫助我嘗試從串口這個字符串保存爲2個XML文件 – Anthony

+0

所以,你可以用你的字符串''然後使用'xmlDoc.SelectNodes(「包裝\ XML」);'有2個節點,然後將其保存爲2個文件。或者你也可以保存到2檔前使用上面的方法,以便能夠讀取XML字符串,那麼你存儲變量對每個「XML」。 – zzT