解析HTML而不会最小化元素+转换

时间:2014-09-04 07:06:31

标签: scala tag-soup scala-xml

我正在为一个Web应用程序编写一个插件,该插件接受用户提供的HTML并将其转换为另一段HTML代码。我主要想找到具有给定类/内容的所有元素("指令")并将其重写为其他内容。我正在使用Scala 2.11.1和TagSoup解析器来处理XML不友好的代码。

目前我的主要问题是对XML.parseString("<div></div>")的调用产生了:

scala> XML.loadString("<div></div>")
res2: scala.xml.Elem = <div/>

此行为会使得到的页面(即iframediv等)变得混乱,因为我希望保留此标记最小化。有没有办法在加载阶段避免这种行为?

第二个问题与TagSoup有关。解析代码块时:

<script type="javascript">console.log("Hello");</script>

TagSoup将其解析为

<script type="javascript">console.log(&quot;Hello&quot;);</script>

有什么办法可以避免这些问题吗?我只和#34;讨厌&#34;迄今为止的解决方案,例如重写所有要最小化的元素,并从<script>标记的内容中删除所有实体。


TagSoup解析完成如下:

import java.net.URL

import org.ccil.cowan.tagsoup.jaxp.SAXFactoryImpl
import org.xml.sax
import org.xml.sax.InputSource

import scala.xml._
import parsing.NoBindingFactoryAdapter

object HTML {
  lazy val adapter = new NoBindingFactoryAdapter
  lazy val parser  = (new SAXFactoryImpl).newSAXParser()

  def load(source: InputSource) = adapter.loadXML(source, parser)
  def loadString(source: String) = load(Source.fromString(source))
  def loadURL(url: URL) = load(new sax.InputSource(url.openConnection().getInputStream))
}

0 个答案:

没有答案