为什么 HtmlAgilityPack 在某些 EPUB 文档中看不到正文

问题描述 投票:0回答:1

我正在尝试使用 HtmlAgilityPack 解析 EPUB 文档(用 VersOne.Epub 打开),它开始工作,但当我测试更多时,它开始在一些书中丢失正文。

由于最初我测试的是英语书籍,问题首先出现在一本俄语书籍上,我认为字母表或编码是问题所在,但事实似乎并非如此,因为我设法将正文放入其中通过“/html/body”或“//body”进行预订。但这在最新的版本中不起作用。例如,这个简短的部分:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title/>
<link rel="stylesheet" href="style.css" type="text/css"/>
<link rel="stylesheet" href="style.css" type="text/css"/>
</head>
<body class="z">
<span id="id154"><div class="title3">
<p class="p">295</p>
</div><p class="p1">От слова bando - публичное оповещение - произошло слово bando-lero, означавшее разбойника, голова которого была оценена.</p></span>
</body>
</html>

Epub 库可以很好地获取字符串。 html 标签已关闭,请检查。 body 标签已关闭,请检查。编码已给出。 HtmlAgilityPack 返回 null。可能是什么问题?

以防万一,这就是我正在做的:

HtmlDocument htmlDocument = new();
htmlDocument.LoadHtml(textContentFile.Content);
var bodyNode = htmlDocument.DocumentNode.SelectSingleNode("//body");

textContentFile来自Epub阅读顺序。

c# html-agility-pack epub
1个回答
0
投票

尝试以下操作:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = @"<?xml version=""1.0"" encoding=""UTF - 8""?>
                     <html xmlns = ""http://www.w3.org/1999/xhtml"" >
                         <head>
                           <title/>
                           <link rel = ""stylesheet"" href = ""style.css"" type = ""text/css"" />
                           <link rel = ""stylesheet"" href = ""style.css"" type = ""text/css"" />
                         </head >
                        <body class=""z"">
                           <span id = ""id154"" >
                              <div class=""title3"">
                                 <p class=""p"">295</p>
                              </div>
                              <p class=""p1"">От слова bando - публичное оповещение - произошло слово bando-lero, означавшее разбойника, голова которого была оценена.</p></span>
                        </body>
                    </html>
";
            XDocument doc = XDocument.Parse(xml);
            XNamespace ns = doc.Root.GetDefaultNamespace();

            XElement body = doc.Descendants(ns + "body").FirstOrDefault();
        }
 

    }

 
}
© www.soinside.com 2019 - 2024. All rights reserved.