【问题标题】:Extract data from HTML of page contents - Sharepoint / CSOM从页面内容的 HTML 中提取数据 - Sharepoint / CSOM
【发布时间】:2018-04-20 18:21:47
【问题描述】:

我查询了我的测试站点的页面内容,如下问题所述:

Read site page contents in Sharepoint using CSOM

foreach (var listItem in items)
{
 if (listItem["Title"].ToString() == "My Page")
 {
  var theItem = listItem;
  label2.Content = label2.Content + "\n" + listItem["CanvasContent1"];
 }
}

我的测试页面中有一个表格,它看起来像这样:

C# 查询的输出是:

<div><div data-sp-canvascontrol=\"\" data-sp-canvasdataversion=\"1.0\" data-sp-controldata=\"&#123;&quot;controlType&quot;&#58;4,&quot;displayMode&quot;&#58;2,&quot;id&quot;&#58;&quot;1d20c0ad-511c-490f-95d7-acc172475797&quot;,&quot;position&quot;&#58;&#123;&quot;zoneIndex&quot;&#58;1,&quot;sectionIndex&quot;&#58;1,&quot;controlIndex&quot;&#58;1&#125;,&quot;innerHTML&quot;&#58;&quot;&lt;p&gt;Hello Page&lt;/p&gt;\\n\\n&lt;div class=\\&quot;canvasRteResponsiveTable\\&quot;&gt;\\n&lt;p&gt;&amp;nbsp;&lt;/p&gt;\\n\\n&lt;div class=\\&quot;canvasRteResponsiveTable\\&quot;&gt;\\n&lt;table style=\\&quot;caret-color&#58;#000000; color&#58;#000000; font-family&#58;-webkit-standard; font-style&#58;normal; font-variant-caps&#58;normal; font-weight&#58;normal; letter-spacing&#58;normal; orphans&#58;auto; text-align&#58;start; text-transform&#58;none; white-space&#58;normal; widows&#58;auto; word-spacing&#58;0px; -webkit-text-size-adjust&#58;auto; -webkit-text-stroke-width&#58;0px; text-decoration&#58;none; border-collapse&
#58;collapse; border&#58;1px solid #000000\\&quot;&gt;\\n\\t&lt;tbody&gt;\\n\\t\\t&lt;tr&gt;\\n\\t\\t\\t&lt;td style=\\&quot;border&#58;1px solid #000000; width&#58;89px\\&quot; valign=\\&quot;top\\&quot;&gt;\\n\\t\\t\\t&lt;p style=\\&quot;margin-left&#58;0px; margin-right&#58;0px\\&quot;&gt;&lt;b&gt;Type&lt;/b&gt;&lt;/p&gt;\\n\\t\\t\\t&lt;/td&gt;\\n\\t\\t\\t&lt;td style=\\&quot;border&#58;1px solid #000000; width&#58;89px\\&quot; valign=\\&quot;top\\&quot;&gt;\\n\\t\\t\\t&lt;p style=\\&quot;margin-left&#58;0px; margin-right&#58;0px\\&quot;&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/p&gt;\\n\\t\\t\\t&lt;/td&gt;\\n\\t\\t&lt;/tr&gt;\\n\\t\\t&lt;tr&gt;\\n\\t\\t\\t&lt;td style=\\&quot;border&#58;1px solid #000000; width&#58;89px\\&quot; valign=\\&quot;top\\&quot;&gt;\\n\\t\\t\\t&lt;p style=\\&quot;margin-left&#58;0px; margin-right&#58;0px\\&quot;&gt;A&lt;/p&gt;\\n\\t\\t\\t&lt;/td&gt;\\n\\t\\t\\t&lt;td style=\\&quot;border&#58;1px solid #000000; width&#58;89px\\&quot; valign=\\&quot;top\\&quot;&gt;\\n\\t\\t\\t&lt;p style=\\&qu
ot;margin-left&#58;0px; margin-right&#58;0px\\&quot;&gt;Carl&lt;/p&gt;\\n\\t\\t\\t&lt;/td&gt;\\n\\t\\t&lt;/tr&gt;\\n\\t\\t&lt;tr&gt;\\n\\t\\t\\t&lt;td style=\\&quot;border&#58;1px solid #000000; width&#58;89px\\&quot; valign=\\&quot;top\\&quot;&gt;\\n\\t\\t\\t&lt;p style=\\&quot;margin-left&#58;0px; margin-right&#58;0px\\&quot;&gt;B&lt;/p&gt;\\n\\t\\t\\t&lt;/td&gt;\\n\\t\\t\\t&lt;td style=\\&quot;border&#58;1px solid #000000; width&#58;89px\\&quot; valign=\\&quot;top\\&quot;&gt;\\n\\t\\t\\t&lt;p style=\\&quot;margin-left&#58;0px; margin-right&#58;0px\\&quot;&gt;Tom&lt;/p&gt;\\n\\t\\t\\t&lt;/td&gt;\\n\\t\\t&lt;/tr&gt;\\n\\t\\t&lt;tr&gt;\\n\\t\\t\\t&lt;td style=\\&quot;border&#58;1px solid #000000; width&#58;89px\\&quot; valign=\\&quot;top\\&quot;&gt;\\n\\t\\t\\t&lt;p style=\\&quot;margin-left&#58;0px; margin-right&#58;0px\\&quot;&gt;C&lt;/p&gt;\\n\\t\\t\\t&lt;/td&gt;\\n\\t\\t\\t&lt;td style=\\&quot;border&#58;1px solid #000000; width&#58;89px\\&quot; valign=\\&quot;top\\&quot;&gt;\\n\\t\\t\\t&lt;p style=\\&quot
;margin-left&#58;0px; margin-right&#58;0px\\&quot;&gt;Ana&lt;/p&gt;\\n\\t\\t\\t&lt;/td&gt;\\n\\t\\t&lt;/tr&gt;\\n\\t&lt;/tbody&gt;\\n&lt;/table&gt;\\n&lt;/div&gt;\\n\\n&lt;p&gt;&amp;nbsp;&lt;/p&gt;\\n&lt;/div&gt;\\n\\n&lt;p&gt;&amp;nbsp;&lt;/p&gt;\\n&quot;,&quot;editorType&quot;&#58;&quot;CKEditor&quot;,&quot;addedFromPersistedData&quot;&#58;true&#125;\"><div data-sp-rte=\"\"><p>Hello Page</p>\n\n<div class=\"canvasRteResponsiveTable\">\n<p>&#160;</p>\n\n<div class=\"canvasRteResponsiveTable\">\n<table style=\"color&#58;#000000;font-family&#58;-webkit-standard;font-style&#58;normal;font-weight&#58;normal;letter-spacing&#58;normal;text-align&#58;start;text-transform&#58;none;white-space&#58;normal;word-spacing&#58;0px;text-decoration&#58;none;border-collapse&#58;collapse;border&#58;1px solid #000000;\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td style=\"border&#58;1px solid #000000;width&#58;89px;\" valign=\"top\">\n\t\t\t<p style=\"margin-left&#58;0px;margin-right&#58;0px;\"><b>Type</b></p>\n\t\t\t</td>\n\t\t\t<td style=
\"border&#58;1px solid #000000;width&#58;89px;\" valign=\"top\">\n\t\t\t<p style=\"margin-left&#58;0px;margin-right&#58;0px;\"><b>Name</b></p>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"border&#58;1px solid #000000;width&#58;89px;\" valign=\"top\">\n\t\t\t<p style=\"margin-left&#58;0px;margin-right&#58;0px;\">A</p>\n\t\t\t</td>\n\t\t\t<td style=\"border&#58;1px solid #000000;width&#58;89px;\" valign=\"top\">\n\t\t\t<p style=\"margin-left&#58;0px;margin-right&#58;0px;\">Carl</p>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"border&#58;1px solid #000000;width&#58;89px;\" valign=\"top\">\n\t\t\t<p style=\"margin-left&#58;0px;margin-right&#58;0px;\">B</p>\n\t\t\t</td>\n\t\t\t<td style=\"border&#58;1px solid #000000;width&#58;89px;\" valign=\"top\">\n\t\t\t<p style=\"margin-left&#58;0px;margin-right&#58;0px;\">Tom</p>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"border&#58;1px solid #000000;width&#58;89px;\" valign=\"top\">\n\t\t\t<p style=\"margin-left&#58;0px;margin-right&#58;0px;\">C</p>
\n\t\t\t</td>\n\t\t\t<td style=\"border&#58;1px solid #000000;width&#58;89px;\" valign=\"top\">\n\t\t\t<p style=\"margin-left&#58;0px;margin-right&#58;0px;\">Ana</p>\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n</div>\n\n<p>&#160;</p>\n</div>\n\n<p>&#160;</p>\n</div></div></div>

.NET/CSOM 是否有任何方法可以更智能地读取这些数据,例如映射对象或字符串中的某种查询,以便我可以从页面中的表中提取数据?

基本上我只是想要一种更好的方法来从这个变量中提取数据:

listItem["CanvasContent1"]

而不是尝试解析巨大的 html 输出

【问题讨论】:

    标签: c# html .net wpf csom


    【解决方案1】:

    您的问题不是很清楚,但您可以从任何列表访问列表内容,包括使用 REST Web 服务调用的 SitePages。

    您可以从 JavaScript 进行 SharePoint REST API 调用,并使用返回的 JSON 快速创建包含数据的 JavaScript 对象。

    $.ajax(
    {
        "url": "/sites/yourSite/_api/web/lists/getbytitle('Documents')/items?$select=Title",
        "method": "GET",
        "headers": {
            "accept": "application/json; odata=verbose"
        },
        "success" = function(data){ ...doSomethingWithTheReturnedData... },
        "error" = function(data){ ...doSomethingWithTheError... }
    }
    );
    

    【讨论】:

    • 我想我再清楚不过了。 REST API 适用于不使用 .NET Framework 的其他技术。我正在使用 CSOM。虽然我可以使用 CSOM 非常清晰且轻松地访问列表信息和其他任何内容(就像您在 REST API 示例中所做的那样),但我现在只关心提取特定已发布页面的内容,这是阅读的输出变量 listItem["CanvasContent1"] 如上所示。谢谢。
    【解决方案2】:

    我能想象的唯一方法是使用 Jsoup for Java 或 BeautifulSoup for Python 来解析 CanvasContent1 中的 HTML 内容。

    您应该能够导航到相应的 div 元素并提取需要的部分。 唯一的问题是每个页面可能不会遵循相似的结构

    因此,您需要定义一个结构并将其告知网站开发人员以使其具有通用性。

    【讨论】:

    • 问题是关于sharepoint,用户正在编写javascript代码。使用 Java 或 python 与这个问题无关
    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多