我正在为 Web 应用程序编写一个插件,该插件采用用户提供的 HTML 并将其转换为不同的 HTML 代码。我主要想找到具有给定类/内容(“指令”)的所有元素并将其重写为其他内容。我正在使用 Scala 2.11.1 和 TagSoup 解析器来处理对 XML 不友好的代码。
我目前的主要问题是对XML.parseString("<div></div>")
收益的调用:
scala> XML.loadString("<div></div>")
res2: scala.xml.Elem = <div/>
这种行为会使生成的页面(即iframe
s、div
s 等)出现乱码,因为我希望不最小化此标签。有没有办法在加载阶段避免这种行为?
第二个问题与 TagSoup 有关。解析如下代码块时:
<script type="javascript">console.log("Hello");</script>
TagSoup 将其解析为
<script type="javascript">console.log("Hello");</script>
有什么办法可以避免这些问题吗?到目前为止,我只提出了“讨厌”的解决方案,例如重写所有元素以使其最小化并从<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))
}