1

我不是信息路径开发人员,这是我第一次真正遇到 XSLT。最近我不得不在一个项目上工作,我需要将上传到 Sharepoint 的 infopath 表单转换为 html。一旦进入 html,我们就可以使用任何第三方库来输出我们想要的任何所需/支持的格式。

我们在代码中所做的:

  1. 我们创建一个 XslCompiledTransform 对象。这是通过解析上传到 sharepoint 的 Xsn 然后使用其中的 Xsl 来完成的。我们使用 View1.xsl。这里没有问题发生。
  2. Xml 表单作为流返回到我们的转换方法,在该方法中,我们创建一个需要使用流应用转换的 XmlDocument。
  3. 然后,我们将 XmlDocument 连同为我们填充 StringWriter 对象的 XmlTextWriter 对象一起传递给 transform() 方法。然后我们可以使用 StringWriter 将 html 作为字符串或流提供给我们,并将其传递给第三方库以更改为任何格式,例如 PDF/MHT 等...

改造后出现的问题:

  1. 我失去了日期格式。最初设置为 1-12-2009 的日期将变为 2009-1-12
  2. 我丢失了图像,而不是图像,我们得到带有“X”的空图像占位符。
  3. 我失去了主细节部分。
  4. 所有 html 控件都通过。我目前将 htmlstream 转换为字符串,并有一个通用方法可以过滤掉任何不需要的 html。我的代码还有一部分会过滤掉下拉列表中的选定值。这样做我遇到了一个场景,即 html 中没有“Selected”属性,但在下拉列表中选择了一个值。这整个字符串解析不是优雅的,它是一个黑客。有一个更好的方法吗?
  5. 如果 XSN 文件中有多个视图,我如何检测视图。
  6. 是否有一种更简单的转换方法,其中传递 xml 文档就足够了,类似于 XmlForm.CurrentView.Export() 方法来处理我的特定场景。

任何建议,指针等将不胜感激。我很高兴发送原始 Xml 和转换后的 Html 以及我的方法清理后留下的 Html。

提前致谢。

穆罕默德。

4

2 回答 2

2

这是一个有趣的想法。但我认为你永远不会让它让你满意。您从 xsn 中提取的 xsl 转换生成的 XHTML 旨在仅在 InfoPath 中显示。XHTML 中内置了相当多的 InfoPath 特定功能。您可能会得到一些有用的东西,但您会遇到很多损坏或奇怪的显示问题。

例如,主从功能是通过 xd:linkedToMaster 属性实现的。xd 命名空间的 URI 是http://schemas.microsoft.com/office/infopath/2003
对此命名空间的所有引用(其中有很多)都实现了 InfoPath 特定的功能,这些功能不会在任何其他 XHTML 呈现器中实现。

让这个实现工作的唯一方法是实现 xd 命名空间在自定义 XHTML 渲染器中使用的所有功能。祝你好运。
抱歉,我没有更好的消息。

于 2009-09-30T23:39:09.010 回答
2

这个问题相当大而且模糊。如果你能把它切成更小的块,你会得到更好的回应:到底哪里出了问题?如果您确定哪个阶段导致了哪个问题,并提出了一个特定的问题,那么您更有可能得到可以提供帮助的人的回应。

话虽如此,有一些通用提示可能会帮助您入门:

  1. 您的日期时间格式问题不太可能与 XSL 相关。XSLT 通常不能很好地进行字符串格式化,因此除非有人编写了相当长且复杂的 XSLT 转换作为“View1.xsl”的一部分,否则 XSLT 只会吐出与传入相同的日期 - 所以你的日期问题可能发生XSLT 步骤之前。
  2. 听起来您的图像指的是断开的链接。输出 html 可能包含带有指向不存在位置<img>的属性的标签src- 找出这些图像应该在哪里,并修复链接。这可能就像<base>在输出 html 中包含适当的标签一样简单。
于 2009-09-24T13:45:35.890 回答