【问题标题】:C# XslCompiledTransform using XmlDocument or XPathDocument when editing is required?需要编辑时使用 XmlDocument 或 XPathDocument 的 C# XslCompiledTransform?
【发布时间】:2009-12-14 17:02:49
【问题描述】:

我在这里做几个假设:

  1. XPathDocument 不可编辑。
  2. XmlDocument 是可编辑的。
  3. XPathDocument 对于 XslCompiledTransform。

既然如此(如果我错了请纠正我),这样做会更好(更有效):

  1. 使用 XmlDocument,然后转换为 转换前的 XPathDocument。 有没有优化的方法 这个?
  2. 坚持使用 XmlDocument 通过转换。

一些背景知识,我从 web 服务获取一个复杂的 xml,然后使用 xpath 找到一些需要修改的元素,然后使用 xslt 创建 html。

提前感谢您的帮助。

【问题讨论】:

  • 重新发表您的评论 - 周末有一个几乎相同的问题。那是你吗?如果没有,我会试着找到它......
  • 不是我的,但我想出了一个类似的解决方案,然后由于我在下面提到的问题(XslCompiledTransform 中的脚本问题)而不得不放弃。

标签: c# xmldocument xslcompiledtransform xpathdocument


【解决方案1】:

这取决于需要修改多少,数据有多大,以及你是否熟悉xslt。如果“不是”到最后,只需使用XDocument 等(上次我运行配置文件时,XDocumentXmlDocument 对于我的数据 - 运行您自己的测试)。使用XDocument.Load / XDocument.Parse,找到你的节点,编辑并保存。


如果您必须使用 xslt,那么XDocument 并不是一个真正的选择;将其加载到 XmlDocument 后,您不妨留在 XmlDocument - 我不建议将其解析为 second DOM。

当然,这让我们感到疑惑:如果要使用xslt,为什么要修改xslt的xmloutside;也许只是在 xslt 期间翻译?

为了获得 100% 准确的答案您的数据,您当然需要对其进行分析。但是,诸如适当使用 xslt 分组结构之类的事情通常会比XmlDocumentXPathDocument 产生很多更大的差异。

【讨论】:

  • 我需要编辑文档的一个原因是转换日期信息(需要从文件时间转换为可读的东西)。如果不使用 xslt 中的脚本,这将无法轻松完成,因为 XslCompiledTransform 中的错误是禁止的。 XslCompiledTransform 会在使用脚本时将文件写入 windows/temp 目录(没有任何方式设置不同的临时目录)。在农场环境中不好,系统人员不允许这样做。无论如何,使用 xslt 修改文档并不是一个好的解决方案(有很多日期要更改,在 c# 中要容易得多)
【解决方案2】:

只需使用XmlDocument 类进行转换。它必须是一个庞大的文档才能真正看到性能提升。如果您打算多次使用 XslCompiledTransform 类,您可能需要编译它的静态实例。

【讨论】:

  • 我正在考虑这样做,我也已经实现了 xslt 的缓存,所以我不确定使用编译版本会增加多少价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多