wpf 从页面内容的HTML中提取数据- Sharepoint / CSOM

nhaq1z21  于 2023-06-30  发布在  其他
关注(0)|答案(3)|浏览(116)

我查询了我的测试网站的页面内容,如以下问题所述:
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是否有更智能地阅读这些数据的方法,比如Map对象或字符串中的某种查询,以便我可以从Page中的表中提取数据?
基本上,我只是想要一种更好的方法来从这个变量中提取数据:

listItem["CanvasContent1"]

而不是试图解析一个巨大的html输出

zengzsys

zengzsys1#

我知道这是旧的,但我正在寻找建议,遇到了你的问题。我相信没有人有一个正确的答案。我相信我们能做的最好的就是完全解码HTML,然后解析和选择元素。
完全解码它需要多次传递:

using System;
using System.Web;
                    
public class Program
{
    public static void Main()
    {
        string txt = "Your Canvas1Content here"; // In my case this will come from a service
        string decodedHtml = "";
        decodedHtml = HttpUtility.HtmlDecode(txt);
        while (txt != decodedHtml)
        {
            txt = decodedHtml;
            decodedHtml = HttpUtility.HtmlDecode(txt);
        }
        Console.WriteLine(decodedHtml);
    }
}

然后使用类似https://html-agility-pack.net的东西来选择我们想要的节点和内容。
我还没有实现这一点,但这是我将在一个我即将开始的项目中遵循的策略。
希望这对某人有帮助。

5fjcxozz

5fjcxozz2#

你的问题不是真实的清楚,但是你可以从任何列表中访问列表内容,包括使用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... }
}
);
txu3uszq

txu3uszq3#

我能想到的唯一方法是使用Jsoup for Java或BeautifulSoup for Python来解析来自CanvasContent1的HTML内容。
您应该能够导航到相应的div元素并提取所需的部分。唯一的问题是,每个页面可能不会遵循类似的结构
因此,您需要定义一个结构,并将其通知给网站开发人员,使其通用。

相关问题