2012-01-17 47 views
5

我创建了具有自定义集合属性(选项卡)的自定义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. 

我已经验证使用网上XML验证XML并删除了此声明

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

,因为这是一个根据XML验证导致不能很好FORMEX XML,但仍没有运气,同样的错误发生。

任何想法?我无法弄清楚特别是在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;",">"); 

如果你删除它会发生什么? 如果它不工作,我会建议包装,才能在CDATA标签值逃离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>"); 

祝你好运!

0

写的下面模块的Element.xml &变化只有你的列表名称的代码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> 
相关问题