의 내가 (사실, 이것은 셰어 프로젝트는) 다음과 같은 XML을 생성하는 제 3 자 라이브러리가 있다고 가정 해 봅시다 :XDocument.CreateWriter 메서드를 사용하는 방법?
<webParts>
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="SomeType, SomeAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ecb5ce1bdfc30252" />
<importErrorMessage>Impossible d’importer ce composant WebPart.</importErrorMessage>
</metaData>
<data>
<properties>
<property name="DataFields" type="string" />
<property name="XmlDefinitionLink" type="string" />
<property name="FilterIncludeChildren3" type="bool">False</property>
</properties>
</data>
</webPart>
</webParts>
이 XML은 XmlTextWriter
인수를 받아들이는 메소드를 호출하여 생성된다. 예상대로이가 작동
var sb = new StringBuilder();
using(var sw = new StringWriter(sb))
using (var xw = new XmlTextWriter(sw))
{
sourceMgr.ExportWebPart(webPartToClone, xw);
}
var wpAsXml = XDocument.Parse(sb.ToString());
: 내가 XDocument
개체를 작업 할 때, 나는이 코드를 사용합니다. 그러나, 코드 라인의 수를 줄이기 위해, 나는이 코드를 시도 :
var wpAsXml = new XDocument();
sourceMgr.ExportWebPart(webPartToClone, wpAsXml.CreateWriter());
을하지만이 코드는 다음과 같은 오류와 함께 실패합니다
System.Xml.XmlException: The prefix '' cannot be redefined from '' to 'http://schemas.microsoft.com/WebPart/v3' within the same start element tag.
at System.Xml.XmlWellFormedWriter.PushNamespace(String prefix, String ns, Boolean explicitlyDefined)
at System.Xml.XmlWellFormedWriter.WriteEndAttribute()
at System.Web.UI.WebControls.WebParts.WebPartManager.ExportWebPart(WebPart webPart, XmlWriter writer)
at Microsoft.SharePoint.WebPartPages.SPWebPartManager.ExportWebPartInternal(WebPart webPart, XmlWriter writer)
at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.ExportWebPart(WebPart webPart, XmlWriter writer)
at SomeWhereInMycode
왜 두번째 코드는 작동하지 않는 이유는 무엇입니까? 이 방법을 사용하는 적절한 방법은 무엇입니까?
추신 : 익명 : 3.5 SP1
이 코드는 XmlWellFormedWriter의 버그 일 뿐이며,이 코드는 .NET 4에서 크게 수정되었습니다. 해결 방법이 있습니다. –