【问题标题】:How to read and output XML processing instructions in Scala?如何在Scala中读取和输出XML处理指令?
【发布时间】:2011-05-15 03:25:57
【问题描述】:

我正在编写一个小型 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 处理指令。我求助于将其读取为字符串,进行字符串操作以找到 xml-stylesheet,然后将其传递给

scala.xml.XML.load(scala.xml.Source.fromString(text))

必须有更好的方法来做到这一点。我需要知道应该在在 Scala 中使用哪个样式表,因为如果需要,Scala 必须调用 XSLT 处理器。

另外,在我处理完它们后,我会使用

scala.xml.Utility.trim(transformed).buildString(true)

但生成的文档不包含 XML 声明,也不包含 HTML DOCTYPE。我也想拥有这些。

我知道这在技术上是两个问题,但基本上是同一个问题的两端,我怀疑第二个问题的解决方案与第一个问题的解决方案有关。

【问题讨论】:

    标签: xml scala


    【解决方案1】:

    基本上,Scala 的 XML 不足以满足您的需求。即使使用生成Documentxml.parsing.XhtmlParser,您也只能获得版本、编码和dtd。您可以制作一个构造解析器、一个事件解析器或使用自定义 SAXParser 覆盖 XML 以获取 XSLT 内容,但您仍然无法使用 Scala XML 表示该信息,并且您仍然必须手动编写保存代码将这些东西附加回来。

    所以我建议您继续使用其中一个处理 XSLT 的 Java 库。

    【讨论】:

    • 我无法想象现代编程语言没有用于评估 XPath 表达式的函数/API!很高兴知道 Scala 属于这一组。
    • @Dimitre 不,这只是您的理解失败。 Scala XML——即Scala 中的标准XML 库——不支持XPath。它支持对 XML 的一元推导,而大多数 XML 库都不支持。所以,如果你想要 XPath,你需要使用一个库。 Scala 这种语言有很多这样的库可用。
    • @Daniel:感谢您的解释。我会知道不要使用 Scala。
    • @Dimitre Scala 中内置的 XML 支持参差不齐。但是您当然也可以开箱即用地使用所有现有的(并且一直很糟糕)Java API。至于我,我无法想象除了 XPath 2.0 之外的任何东西,这意味着无论如何直接使用 Saxon。
    • @ebruchez:是的,我想如果我一定要使用 Java,我会选择 Saxon(尽管我听说过其他 XPath 2.0(仅 XPath)引擎,例如 PsychoPath)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    相关资源
    最近更新 更多