我正在编写一个小型
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.我也想要那些.
我知道这在技术上是两个问题,但那些基本上都是同一问题的两端,我怀疑第二个问题的解决方案与第一个问题的解决方案有关.
最佳答案 基本上,Scala的XML不足以满足您的需求.即使使用生成Document的xml.parsing.XhtmlParser,您也只能获得版本,编码和dtd.您可以创建一个构造解析器,一个事件解析器或使用自定义SAXParser覆盖XML来获取XSLT内容,但是您仍然无法使用Scala XML表示该信息,并且您仍然需要手动编写保存代码追加那些东西.
所以我建议你继续使用一个处理XSLT的Java库.