xml – 如何在SharePoint 2010中从数据库中找到SharePoint列表的字段?

在SharePoint 2003和2007中,有一个名为AllLists的表,其中有一个名为tp_Fields的列,其中包含一个包含特定列表的所有字段的xml.

存储在tp_Fields列中的xml示例对于包含3个字段的SharePoint列表是这样的:

<FieldRef Name="ContentTypeId" />
<FieldRef Name="_ModerationComments" ColName="ntext1" />
<FieldRef Name="WebPartTypeName" ColName="nvarchar9" />

我们有一个应用程序正在使用C#代码读取此列,例如

var tpFields = (String) drView["tp_Fields"];

在SharePoint 2010中,此列的数据类型已更改为varbinary,而是仅包含一些二进制数据!

(我知道理想/推荐的解决方案是使用SharePoint Web服务或SharePoint对象模型而不依赖于基础表,但不幸的是我们有一个现有的应用程序,我们也需要使它与2010一起工作.我希望我们不必重新设计一切!)

我如何知道SharePoint列表中SharePoint数据库中的哪些字段?或者如果可能的话,如何将此varbinary列转换为与之前相同的xml?

我希望这个问题很明确(对它的可能性没什么希望).

谢谢,

解决方法

为了分享,我编写了下面的方法,它现在可以从中提取xml,尽管没有保证生成的xml与SharePoint 2003/2007兼容.

private static string getXmlFromTpFields(byte[] tpFields)
        {
            using (var memoryStream = new MemoryStream(tpFields))
            {
                // ignore the first 14 bytes; I'm not sure why but it works!
                for (var index = 0; index <= 13; index++)
                    memoryStream.ReadByte();

                var deflateStream = new DeflateStream(memoryStream,CompressionMode.Decompress);

                using (var destination = new MemoryStream())
                {
                    deflateStream.copyTo(destination);

                    var streamReader = new StreamReader(destination);
                    destination.Position = 0;
                    return streamReader.ReadToEnd();
                }
            }
        }

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念