2012-01-17 9 views
5

Ho creato una web part personalizzata con una proprietà di raccolta personalizzata (schede). La web part funziona correttamente quando si modifica e si salva la proprietà personalizzata in modalità modifica (tramite browser). Voglio aggiornare la mia parte web personalizzato utilizzando i servizi web, quindi ho esportato la parte web e preso il contenuto XML e superato così com'è (così ho potuto facilmente verificare), ma è verificato un erroreErrore XML ben formato durante il salvataggio della web part condivisa tramite Web 2.0

The file you imported is not valid. 
Verify that the file is a Web Part description file (*.webpart or *.dwp) and that it contains well-formed XML. 

I hanno già convalidato l'XML utilizzando validatore xml on-line e rimosso questa dichiarazione

<?xml version="1.0" encoding="utf-16"?> 

come questo è quello che causa l'XML non ben Formex secondo il validatore XML, ma ancora fortuna, lo stesso errore.

Qualsiasi idea? Non sono riuscito a capire cosa c'è di sbagliato nell'XML, specialmente nella proprietà Tabs.

Codice:

string webPartXml = string.Empty; 
    string pageUrl = currenturl; 

     Guid storageKey = new Guid(webpartid); 

     using (StreamReader sr = new StreamReader(@"C:\tab.txt")) 
     {    
      webPartXml = sr.ReadToEnd();     
     } 
     webPartXml = webPartXml.Replace("&lt;", "<").Replace("&gt;",">"); 

     try 
     { 
      svc.SaveWebPart2(pageUrl, storageKey, webPartXml, WebpartpagesSvc.Storage.Shared, false); 
     }catch(Exception err) 
     { 
      throw; 
     } 

Tab.txt (Tab.webpart)

<webParts> 
    <webPart xmlns="http://schemas.microsoft.com/WebPart/v3"> 
    <metaData> 
     <type name="Test.TabWebPart, Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c9e6068352095bx6" /> 
     <importErrorMessage>Cannot import this web part.</importErrorMessage> 
    </metaData> 
    <data> 
     <properties> 
     <property name="ChromeType" type="chrometype">None</property> 
     <property name="Height" type="unit" /> 
     <property name="PanelHeight" type="int">0</property> 
     <property name="ShowRoundedTabs" type="bool">False</property> 
     <property name="AllowZoneChange" type="bool">True</property> 
     <property name="AllowEdit" type="bool">True</property> 
     <property name="Tabs" type="Test.Tabs, Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c9e6068352095bx6">&lt;?xml version="1.0" encoding="utf-16"?&gt; 
&lt;Tabs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt; 
    &lt;TabInfo&gt; 
    &lt;Tab&gt; 
     &lt;Title&gt;HTML-TESTING&lt;/Title&gt;  
    &lt;/Tab&gt; 
    &lt;/TabInfo&gt; 
&lt;/Tabs&gt;</property> 
     <property name="CatalogIconImageUrl" type="string" /> 
     <property name="PanelWidth" type="int">0</property> 
     <property name="AllowConnect" type="bool">True</property> 
     <property name="AllowClose" type="bool">True</property> 
     <property name="HelpMode" type="helpmode">Navigate</property> 
     <property name="ChildTab" type="System.Collections.Specialized.NameValueCollection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934ebb9" /> 
     <property name="Hidden" type="bool">False</property> 
     <property name="Title" type="string">Tab </property> 
     <property name="ChromeState" type="chromestate">Normal</property> 
     <property name="AllowHide" type="bool">True</property> 
     <property name="Description" type="string">for Tab Sample.</property> 
     <property name="AllowMinimize" type="bool">True</property> 
     <property name="TitleUrl" type="string" /> 
     <property name="Width" type="unit" /> 
     <property name="ExportMode" type="exportmode">All</property> 
     <property name="Direction" type="direction">NotSet</property> 
     <property name="HelpUrl" type="string" /> 
     <property name="TitleIconImageUrl" type="string" /> 
     </properties> 
    </data> 
    </webPart> 
</webParts> 

messaggio di errore

base {System.SystemException} = {"Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown."} 
InnerText = "The file you imported is not valid. Verify that the file is a Web Part description file (*.webpart or *.dwp) and that it contains well-formed XML." 
InnerXml = "<errorstring xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">The file you imported is not valid. Verify that the file is a Web Part description file (*.webpart or *.dwp) and that it contains well-formed XML.</errorstring>" 

risposta

0

Penso che sia quando si tenta di ripristinare il xml originale questo lo spezza. Hai davvero bisogno di questa riga di codice:

webPartXml = webPartXml.Replace("&lt;", "<").Replace("&gt;",">"); 

Cosa succede se lo rimuovi? Se non funziona, consiglio avvolgendo il valore nel CDATA-tag al fine di sfuggire alla xml:

string startTabProperty = @"<property name=""Tabs"" type=""Test.Tabs, Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c9e6068352095bx6"">"; 
string endTabProperty = "></property>"; //Note the >< in order to identify correct place 
webPartXml = webPartXml.Replace("&lt;", "<").Replace("&gt;",">"); 
webPartXml = webPartXml.Replace(startTabProperty, startTabProperty + "<![CDATA["); 
webPartXml = webPartXml.Replace(endTabProperty , ">" + "]]>" + "</property>"); 

Buona fortuna!

0

scrivere il codice di seguito nella Element.xml & cambiamento solo il tuo nome della lista del modulo in listUrl & TitleUrl

<Module> 
<File> 
<AllUsersWebPart WebPartZoneID="wzMain" WebPartOrder="2"> 
    <![CDATA[ 
    <webParts> 
    <webPart xmlns="http://schemas.microsoft.com/WebPart/v3"> 
    <metaData> 
    <type name="Microsoft.SharePoint.WebPartPages.XsltListViewWebPart, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> 
    <importErrorMessage>Cannot import this Web Part.</importErrorMessage> 
    </metaData> 
    <data> 
    <properties> 
    <property name="ShowWithSampleData" type="bool">False</property> 
    <property name="Default" type="string" /> 
    <property name="NoDefaultStyle" type="string" null="true" /> 
    <property name="CacheXslStorage" type="bool">True</property> 
    <property name="ViewContentTypeId" type="string" /> 
    <property name="XmlDefinitionLink" type="string" /> 
    <property name="ManualRefresh" type="bool">False</property> 
    <property name="ListUrl" type="string" >Lists/Employee_list</property> 
    <property name="TitleUrl" type="string">/Lists/Employee_list</property> 
    </properties> 
    </data> 
    </webPart> 
    </webParts> 
    ]]> 
    </AllUsersWebPart> 
    </File> 
    </Module> 
Problemi correlati