Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解析HTML节点_C#_Asp.net_Asp.net Mvc_Openxml - Fatal编程技术网

C# 如何解析HTML节点

C# 如何解析HTML节点,c#,asp.net,asp.net-mvc,openxml,C#,Asp.net,Asp.net Mvc,Openxml,我的网站流量 经过身份验证的用户将上载docx 我正在使用OpenXmlPowerToolsAPI将此docx转换为HTML 保存文件 将html页面的每个节点保存到数据库中 数据库:- tblNodeCollection 诺代德 节点类型(预期值-,,,) 节点内容(预期值-这是p内容 在第3步之前没有问题。但是我不知道如何将节点集合保存到表中 我在谷歌上搜索并找到了htmlagiiltypack,但对它知之甚少 using DocumentFormat.OpenXml.Packagin

我的网站流量

  • 经过身份验证的用户将上载docx
  • 我正在使用
    OpenXmlPowerTools
    API将此docx转换为HTML
  • 保存文件
  • 将html页面的每个节点保存到数据库中
  • 数据库:-

    tblNodeCollection
    
    • 诺代德
    • 节点类型(预期值-
    • 节点内容(预期值-
      这是p内容

    在第3步之前没有问题。但是我不知道如何将节点集合保存到表中

    我在谷歌上搜索并找到了
    htmlagiiltypack
    ,但对它知之甚少

    using DocumentFormat.OpenXml.Packaging;
    using HtmlAgilityPack;
    using OpenXmlPowerTools;
    
    namespace ExportData 
    {
    public class ExportHandler 
    {
    public void GenerateHTML()
        {
            byte[] byteArray = File.ReadAllBytes(@"d:\test.docx");
            using (MemoryStream memoryStream = new MemoryStream())
            {
                memoryStream.Write(byteArray, 0, byteArray.Length);
                using (WordprocessingDocument doc =
                    WordprocessingDocument.Open(memoryStream, true))
                {
                    HtmlConverterSettings settings = new HtmlConverterSettings()
                    {
                        PageTitle = "My Page Title"
                    };
                    XElement html = HtmlConverter.ConvertToHtml(doc, settings);
    
                    File.WriteAllText(@"d:\Test.html", html.ToStringNewLineOnAttributes());
    
    
                }
            }
    
            //now how do I proceed from here
        }
     }
    

    非常感谢任何类型的帮助/指导。

    根据我们在评论中的讨论,以及您似乎一直坚持的部分,我建议您:

    这里的内容可能会为如何转换为html提供一些帮助

    当然,您仍然面临需要能够拆分每个页面的问题(正如您在评论中提到的),您可能能够将每个页面单独导出为html

    对于您的数据库结构,我推荐类似于:

    [Document Table]
      - Document ID
      - Document Name
      - Any other data you need per-document
    
    [Node Table]
      - Node ID
      - Document ID (foreign key)
      - Node Content (string)
    
    确保在节点表上有合理的索引,因为随着时间的推移,您可能会在数千行(如果不是数百万行的话)上查找索引(尤其是文档id上的一行)

    对每个节点都有一个索引属性(例如bigint位置)也可能很有用,这样您就可以通过将节点按顺序重新组合在一起来重建文档


    总的来说,我的建议是试着让你的老板明白原因,真正反对这个愚蠢的设计决定。

    根据我们在评论中的讨论,以及你似乎一直坚持的部分,我建议如下:

    这里的内容可能会为如何转换为html提供一些帮助

    当然,您仍然面临需要能够拆分每个页面的问题(正如您在评论中提到的),您可能能够将每个页面单独导出为html

    对于您的数据库结构,我推荐类似于:

    [Document Table]
      - Document ID
      - Document Name
      - Any other data you need per-document
    
    [Node Table]
      - Node ID
      - Document ID (foreign key)
      - Node Content (string)
    
    确保在节点表上有合理的索引,因为随着时间的推移,您可能会在数千行(如果不是数百万行的话)上查找索引(尤其是文档id上的一行)

    对每个节点都有一个索引属性(例如bigint位置)也可能很有用,这样您就可以通过将节点按顺序重新组合在一起来重建文档


    总的来说,我的建议是试着让你的老板明白原因,真正反对这个愚蠢的设计决定。

    以下是如何解析html并将其保存到数据库的简化过程。我希望这能帮助你和/或给你一个解决问题的方法

            HtmlWeb h = new HtmlWeb();
            HtmlAgilityPack.HtmlDocument doc = h.Load("http://stackoverflow.com/questions/41183837/how-to-store-html-nodes-into-database");
            HtmlNodeCollection tableNodes = doc.DocumentNode.SelectNodes("//table");
            HtmlNodeCollection h1Nodes = doc.DocumentNode.SelectNodes("//h1");
            HtmlNodeCollection pNodes = doc.DocumentNode.SelectNodes("//p");
            //get other nodes here
    
            foreach (var pNode in pNodes)
            {
                string id = pNode.Id;
                string content = pNode.InnerText;
                string tag = pNode.Name;
    
                //do other stuff here and then save to database
    
                //just an example...
                SqlConnection conn = new SqlConnection("here goes conection string");
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = "INSERT INTO tblNodeCollection (Tag, Id, Content) VALUES (@tag, @id, @content)";
                cmd.Parameters.Add("@tag", tag);
                cmd.Parameters.Add("@id", id);
                cmd.Parameters.Add("@content", content);
    
                cmd.ExecuteNonQuery();
            }
    

    下面是如何解析html并将其保存到数据库的简化过程。我希望这将帮助您和/或让您了解如何解决您的问题

            HtmlWeb h = new HtmlWeb();
            HtmlAgilityPack.HtmlDocument doc = h.Load("http://stackoverflow.com/questions/41183837/how-to-store-html-nodes-into-database");
            HtmlNodeCollection tableNodes = doc.DocumentNode.SelectNodes("//table");
            HtmlNodeCollection h1Nodes = doc.DocumentNode.SelectNodes("//h1");
            HtmlNodeCollection pNodes = doc.DocumentNode.SelectNodes("//p");
            //get other nodes here
    
            foreach (var pNode in pNodes)
            {
                string id = pNode.Id;
                string content = pNode.InnerText;
                string tag = pNode.Name;
    
                //do other stuff here and then save to database
    
                //just an example...
                SqlConnection conn = new SqlConnection("here goes conection string");
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = "INSERT INTO tblNodeCollection (Tag, Id, Content) VALUES (@tag, @id, @content)";
                cmd.Parameters.Add("@tag", tag);
                cmd.Parameters.Add("@id", id);
                cmd.Parameters.Add("@content", content);
    
                cmd.ExecuteNonQuery();
            }
    


    我们可以问一下你为什么要将节点保存在数据库中吗?为什么不保存整个XML并在需要时在内存中解析和处理它?@Clint No.
    该网站与每个节点都有很多其他事情要做。任何关于这可能是什么的上下文?它可能完全决定了最佳解决方案。该网站正在进行电子学习。因此培训师将上传加载一个word文件,其中包含页面的每个部分(节点将具有seprate reviewer&approver这可能是一个典型的锤击&钉子问题,您有什么理由不能将文档拆分为其组成页面,并将每个页面存储为一个单独的文档,并将它们与数据库中的条目链接?这样您就可以实现分离,并能够在他结束了。文档也被压缩了,因此,如果你存储每个节点的数据,那么随着时间的推移,你将面临大量文档的严重数据爆炸。我们可以问一下,你为什么要尝试将节点保存在数据库中?为什么不保存整个XML并在需要时在内存中解析和处理它?@Clint No.
    该网站有很多与每个节点相关的其他内容。有什么上下文吗?它可能完全决定了最佳解决方案。该网站进入电子学习。因此培训师将上传一个word文件,其中包含页面的每个部分(节点将具有seprate reviewer&approver这可能是一个典型的锤击&钉子问题,您有什么理由不能将文档拆分为其组成页面,并将每个页面存储为一个单独的文档,并将它们与数据库中的条目链接?这样您就可以实现分离,并能够在他结束了。文档也被压缩了,所以如果你存储每个节点的数据,那么随着时间的推移,你将面临大量文档的严重数据爆炸。但是我该如何将我的html页面拆分为节点。这是我的疑问,但我该如何将我的html页面拆分为节点。这是我的疑问。你的帖子似乎与我的需求高度相关。让我进一步讨论选中此项。谢谢:)是的。它满足了我的需要。谢谢:)这里有一个补充说明,但真正的问题似乎是如何使用HtmlAgilityPack解析HTML:)我不知道该怎么做才能得到HTML页面的节点。但是在你发表文章之后,我知道了如何使用API。谢谢。你能检查一下这篇文章吗。你的文章似乎与我的需要高度相关。让我进一步检查一下。谢谢:)是的。它满足了我的需要。谢谢:)这是一个更新,但真正的问题似乎是如何使用HtmlAgilityPack解析HTML:)我不知道,我该如何获取HTML页面的节点。但是在你的帖子之后,我知道了如何使用API。谢谢,你能看看这个帖子吗。