2013-03-20 208 views
-1

我在本地读取了html文件,但是这些“.html”文件在内部被分割为具有格式“file.html#xxxxx”。 我在网页浏览器上显示这些文件,但它不接受由于“#”给出的路径阅读.html#XXX并在网页浏览器上显示

我正在阅读epub书籍,其章节由“#”内部划分,解析后为每个章节获取它自己的分区,这个分区用#表示。

这是师

<navMap> 
    <navPoint id="np-1" playOrder="1"> 
     <navLabel> 
     <text>YOUR NATIONAL PARKS BY ENOS A. MILLS</text> 
     </navLabel> 
     <content src="@[email protected]@[email protected]@[email protected]@[email protected]@42248-h-0.htm.html#pgepubid00000"/> 
     <navPoint id="np-2" playOrder="2"> 
     <navLabel> 
      <text>PREFACE</text> 
     </navLabel> 
     <content src="@[email protected]@[email protected]@[email protected]@[email protected]@42248-h-0.htm.html#pgepubid00001"/> 
     </navPoint> 
     <navPoint id="np-3" playOrder="3"> 
     <navLabel> 
      <text>CONTENTS</text> 
     </navLabel> 
     <content src="@[email protected]@[email protected]@[email protected]@[email protected]@42248-h-0.htm.html#pgepubid00002"/> 
     </navPoint> 
</navMap> 

和显示器的为例:

navPoint = toc.NavMap[0]; 
string srcContent = navP.Src; 
    webBrowser1.Source= path+srcContent 
+1

这是很不清楚你有什么问题。你想展示什么,在哪里,哪些不起作用? – Oded 2013-03-20 20:42:06

+0

我想显示由# – sansa 2013-03-20 20:44:11

+0

指示的html的部分内容你试过了什么?你用什么来解析HTML?一般来说,我不认为这是可能的,除非不同部分的结构相似。 – Oded 2013-03-20 20:45:21

回答

0

我想保持的回答尽可能干净,所以我完全重写了答案。我相信你需要做以下步骤:

  • 订阅称为NavigatingDocumentCompleted
  • 使用代码来解析URL的活动,并通过#
  • 覆盖导航分裂,并给了web浏览器的新没有锚点的干净的URL
  • 将锚点存储在变量中例如
  • 在文件加载后,只需找到锚点引用的元素并滚动到它即可

结果可能如下所示。请注意,这不是一个复制&粘贴代码,我只是想给你一个想法如何完成你的事情。您需要修改此代码以满足您的需求!

假设所请求的URL是myFile.html#customAnchor

webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating); 
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); 

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) 
{ 
    if (e.Url.Contains("#") 
    { 
     string[] urlParts = e.Url.Split('#'); // split the string by character # 
     string newUrl = urlParts[0];   // = myFile.html 
     _somePrivateField = urlParts[1];  // = customAnchor 

     webBrowser1.Navigate(new Uri(newUrl)); 
    } 
} 

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    HtmlElementCollection elements = this.webBrowser1.Document.Body.All; 
    foreach(HtmlElement element in elements){ 
     string nameAttribute = element.GetAttribute("Name"); 
     if(!string.IsNullOrEmpty(nameAttribute) && nameAttribute == _somePrivateField){ 
      element.ScrollIntoView(true); 
      break; 
     } 
    } 
} 

还没有真正尝试过这一点,但我希望这将有助于你足够的解决您的问题。

+0

你能多解释一下吗 – sansa 2013-03-20 20:44:44

+0

这是相当无意义的。它并没有真正回答这个问题(在HTML中你会找到这些'#'来解析?)。 – Oded 2013-03-20 20:46:09

+0

@ sansa.med,我刚刚更新了答案。 – walther 2013-03-20 20:48:18