Я пытаюсь загрузить действительный html для обработки в Scala. Кажется, что преобразование в xml было бы хорошей отправной точкой. Это выглядит очень приятным кодом на несколько спорных scala.xml.Xhtml Scala core library для этого. В основном это должно влечь за собой «исправление» тегов, которые действительны в html, но не являются допустимыми xml и, следовательно, не позволяют документу быть действительным xhtml и немного больше. Вот код оттуда:Преобразование html в xhtml (действительный xml) в Scala
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('>')
}
}
}
Что, кажется, принять какое-то чрезмерное упорство в поиске, как использовать эту функцию для существующего документа HTML, который был извлекаться с scala.io.Source(fromFile)
. Смысл типа Node
кажется немного в базе кода, или я не уверен, как получить из строки, полученной от 0aот scala.io.Source, к чему-то, что может быть передано в вышеуказанную скопированную функцию toXhtml
.
The scaladoc for this function, похоже, не разъясняет многое.
Существует также another related library, где в скайдакоке имеется только миллион записей.
Я был бы очень рад, если бы кто-нибудь мог сказать, как необработанную строку html можно преобразовать в «чистую» xhtml с помощью этой библиотеки и пройти через то, как это сделать с the source code, так как моя Scala, вероятно, не так хороша. см. ..
Да, я просто надеялся, что будет чистое решение Scala, где я могу быстро понять код и при необходимости изменить его. Я могу принять ту функцию Scala, о которой я упоминал, поскольку она настолько краткий ... поскольку я чувствую, что не имею ни малейшего представления о том, насколько либеральный или оригинальный может быть на входе, которого я еще не видел. Scala-код очень лаконичен, чтобы следовать .. только входной водопровод немного изворотливый. – matanster