我試圖在Scala中加載有效的html進行處理。看起來像轉換到XML將是一個很好的起點。它看起來像很不錯的代碼在有點爭議的scala.xml.Xhtml Scala core library這樣做。基本上它應該包含「固定」標籤,這些標籤在html中是有效的,但不是有效的xml,因此防止文檔成爲有效的xhtml,並且只是更多。下面是從那裏代碼:在Scala中將html轉換爲xhtml(有效的xml)
def toXhtml(
x: Node,
pscope: NamespaceBinding = TopScope,
sb: StringBuilder = new StringBuilder,
stripComments: Boolean = false,
decodeEntities: Boolean = false,
preserveWhitespace: Boolean = false,
minimizeTags: Boolean = true): Unit =
{
def decode(er: EntityRef) = XhtmlEntities.entMap.get(er.entityName) match {
case Some(chr) if chr.toInt >= 128 => sb.append(chr)
case _ => er.buildString(sb)
}
def shortForm =
minimizeTags &&
(x.child == null || x.child.length == 0) &&
(minimizableElements contains x.label)
x match {
case c: Comment => if (!stripComments) c buildString sb
case er: EntityRef if decodeEntities => decode(er)
case x: SpecialNode => x buildString sb
case g: Group =>
g.nodes foreach { toXhtml(_, x.scope, sb, stripComments, decodeEntities, preserveWhitespace, minimizeTags) }
case _ =>
sb.append('<')
x.nameToString(sb)
if (x.attributes ne null) x.attributes.buildString(sb)
x.scope.buildString(sb, pscope)
if (shortForm) sb.append(" />")
else {
sb.append('>')
sequenceToXML(x.child, x.scope, sb, stripComments, decodeEntities, preserveWhitespace, minimizeTags)
sb.append("</")
x.nameToString(sb)
sb.append('>')
}
}
}
什麼似乎採取一些過度的毅力是找到如何使用該功能已獲取與scala.io.Source(fromFile)
現有的HTML文檔。 Node
類型的含義在代碼庫中似乎有點elusive,或者我不確定如何從scala.io.Source的fromFile
接收到的字符串獲取某些可以輸入到上述複製函數toXhtml
中的字符串。
The scaladoc for this function似乎沒有太多說明。
還有another related library其中scaladoc中只有zillion條目。
如果有人能說如何將一個原始的html字符串轉換爲'clean'xhtml使用這個庫,並且通過如何從the source code中推導出來,因爲我的Scala可能不是那麼好請參閱..
是的,我只是希望有一個純粹的Scala解決方案,我可以快速理解代碼並在必要時進行更改。我可能會採用我提到的Scala函數,因爲它非常簡潔......因爲我覺得我幾乎不知道自由或原創可能會對我還沒有看到的投入產生什麼樣的影響。斯卡拉代碼非常簡潔,只有它的輸入管道有點狡猾。 – matanster