我正在编写一个执行以下操作的小型Scala应用程序:
1)读取XML / XHTML文件
2)做一些小的预处理
3)如果需要,使用XSLT样式表对其进行转换。
4)稍微后处理。
5)将其保存为XHTML。
我的XML文件将从以下内容开始:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../xslt/default.xslt"?>
如果我用
阅读它们scala.xml.XML.load(scala.xml.Source.fromFile(file))
我得到了一个Elem,但是我放弃了XML处理指令。我使用它作为String读取,执行String操作以找到xml-stylesheet,然后将其传递给
scala.xml.XML.load(scala.xml.Source.fromString(text))
必须有更好的方法来做到这一点。我需要知道哪些样式表我应该在Scala中使用 ,因为如果需要,Scala必须调用XSLT处理器。
此外,在我完成处理后,我使用
保存它们scala.xml.Utility.trim(transformed).buildString(true)
但结果文档不包含XML声明,也不包含HTML DOCTYPE。我也想要那些。
我知道这在技术上是两个问题,但这些基本上都是同一问题的两端,我怀疑第二个问题的解决方案与第一个问题的解决方案有关。
答案 0 :(得分:2)
基本上,Scala的XML不能满足您的需求。即使使用生成xml.parsing.XhtmlParser
的{{1}},您也只能获得版本,编码和dtd。您可以创建一个构造解析器,一个事件解析器或使用自定义SAXParser覆盖XML来获取XSLT内容,但是您仍然无法使用Scala XML表示该信息,并且您仍然需要手动编写保存代码将这些东西追回来。
所以我建议你继续使用一个处理XSLT的Java库。