2012-01-17 17 views
5

カスタムコレクションプロパティ(タブ)を持つカスタムWebパーツを作成しました。編集モードで(ブラウザ経由で)カスタムプロパティを編集して保存すると、Webパーツが適切に動作します。私は、Webサービスを使用して、私のカスタムWebパーツを更新したいので、私はWebパーツをエクスポートして、XMLコンテンツを取り、それは(私は簡単にそれをテストすることができ)であるとして、それを渡されたが、エラーがWebサービスを使用してSharepointカスタムWebパーツを保存すると、整形式のXMLエラーが発生する

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を発生しましたすでにオンラインのXML検証ツールを使用してXMLを検証し、これはXMLのバリデータによると、よくformexないXMLの原因1、まだ運であるとして、この文

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

を削除して、同じエラーが発生しました。

すべてのアイデア?特にTabsプロパティでXMLの何が間違っているのか分かりませんでした。

コード:

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> 

エラーメッセージ

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>" 

答えて

0

私はあなたが元にXMLを復元しようとすると、それだと思いますそれはそれを壊す。

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

削除するとどうなりますか? それは仕事をdoesntの場合、私は、XMLを逃れるために、CDATAタグで値を包むお勧めします:

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>"); 

幸運!

0

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> 
にモジュールの Element.xml &の変化にのみ、あなたのリスト名を以下のコードを書きます
関連する問題