我创建了一个具有自定义集合属性(Tabs)的自定义Web部件。当您在编辑模式下编辑和保存自定义属性时(通过浏览器),Web部件可以正常工作。我想使用Web服务更新我的自定义Web部件,因此我导出了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("<", "<").Replace(">",">");
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"><?xml version="1.0" encoding="utf-16"?>
<Tabs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TabInfo>
<Tab>
<Title>HTML-TESTING</Title>
</Tab>
</TabInfo>
</Tabs></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 :(得分:0)
我认为这是当你尝试将xml恢复到破坏它的原始版本时。你真的需要这行代码吗?
webPartXml = webPartXml.Replace("<", "<").Replace(">",">");
如果将其删除会怎样? 如果它不起作用,我建议将值包装在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("<", "<").Replace(">",">");
webPartXml = webPartXml.Replace(startTabProperty, startTabProperty + "<![CDATA[");
webPartXml = webPartXml.Replace(endTabProperty , ">" + "]]>" + "</property>");
祝你好运!
答案 1 :(得分:0)
在模块的Element.xml
&amp;中编写以下代码。仅在listUrl
&amp;中更改您的列表名称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>