XslCompiledTransform引起了Infopath的悲痛

时间:2009-09-24 13:20:39

标签: .net xslt infopath xslcompiledtransform

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

我们在代码中做了什么:

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

    1. 我丢失了DateFormatting。最初设置为1-12-2009的日期将成为2009-1-12
    2. 我丢失了图像,而不是图像,我们得到了带有“X”的空图像占位符。
    3. 我丢失了Master Detail部分。
    4. 所有html控件都通过。我目前将htmlstream转换为字符串,并且有一个通用方法可以过滤掉任何不需要的html。我的代码中还有一部分用于过滤掉下拉列表中的选定值。这样做我遇到了一个场景,其中html中没有“Selected”属性,但是在thr下拉列表中选择了一个值。这个整个绳子的分配不是很严重,而是一个很大的问题。有更好的方法吗?
    5. 如果XSN文件中有多个视图,我该如何检测视图。
    6. 是否有更简单的转换方式,传递xml文档就足够了,就像XmlForm.CurrentView.Export()方法一样,可以处理我的特定场景。
    7. 任何建议,指针等都会非常感激。我很高兴在我的方法清理后发送原始的Xml和转换后的Html和Html。

      提前致谢。

      穆罕默德。

2 个答案:

答案 0 :(得分:2)

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

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

  1. 您的日期时间格式问题不太可能与XSL相关。 XSLT通常不能很好地进行字符串格式化,所以除非有人在“View1.xsl”中编写了一个相当长而复杂的XSLT转换,否则XSLT只是在吐出与它进入时相同的日期 - 所以你的日期问题可能在 XSLT步骤之前发生
  2. 听起来你的图片指的是破损的链接。输出html可能包含带有<img>属性的src标记,这些属性指向不存在的位置 - 找出这些图像的位置,并修复链接。这可能就像在输出html中包含适当的<base>标记一样简单。

答案 1 :(得分:2)

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

例如,master-detail功能是使用xd:linkedToMaster属性实现的。 xd名称空间的URI是http://schemas.microsoft.com/office/infopath/2003   对此命名空间的所有引用(以及其中有很多)都实现了InfoPath特定的功能,这些功能将不会在任何其他XHTML渲染器中实现。

实现此实现的唯一方法是实现xd命名空间在自定义XHTML渲染器中使用的所有功能。祝你好运。
对不起,我没有更好的消息。