InfoPath表单用来扭转模板所确定格式的XML文档,但是于转变的XML文件被时时会含有有外加信息,这些信息吗是因节点的样式出现于XML文件中,并且于根本节点之外,主要用来在IE中分辨该XML文件是因此InfoPath表单生成的足直接用InfoPath打开,如果您于其它的浏览器被打开这些文件,则无会见起文件打开的提拔。这些额外信息于次中处理的时段不免会带动有劳动,影响我们对XML节点的处理同操作。这些额外信息方可在C#面临找到呼应的目标,看本身的另外一样篇稿子http://www.cnblogs.com/jaxu/archive/2011/10/04/2198752.html。

  例如我出一个非常简单的页面,功能就是是把指定的XML文件原样输出及页面及,我着想用XSLT对象来分析这些XML文件,然后将结果输出到页面上。XSLT中之代码应该非常简单,只需要拿装有的节点原样输出就行了。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="*">
      <xsl:copy-of select="./node()"/>
    </xsl:template>
</xsl:stylesheet>

  然后在C#代码中利用XPathDocument和XslCompiledTransform来换输出结果。但是本人发觉这样做在IE中开辟页面的时光总是提示而打开文件,原因就是是为IE识别出了这些XML文件中之InfoPath的额外信息。当然,如果您用FireFox打开的说话则不见面并发提示,而且你还能顾那些额外信息为让分析出了。最简单易行的解决办法就是以输出之前用这些额外信息去丢,你一点一滴可当C#里来贯彻,这里叫有用XSLT的实现方式。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output indent="yes" omit-xml-declaration="yes" method="xml" />

  <!--<xsl:template match="/">
        <xsl:copy-of select="./node()"/>
    </xsl:template>-->


  <xsl:template match="/">
    <!-- select all nodes and only attributes in the default namespace
-->
    <xsl:apply-templates select="@*[namespace-uri()='']|node()"/>
  </xsl:template>

  <!-- copy any other element type node in any other namespace -->
  <xsl:template match="node()">
    <!-- redefine the element: note that all other namespace declarations
are omitted -->
    <xsl:element name="{name()}" namespace="{namespace-uri()}">
      <!-- match any child attribute or node -->
      <xsl:apply-templates select="@*[namespace-uri()='']|node()"/>
    </xsl:element>
  </xsl:template>

  <!-- copy any other non-element type nodes -->
  <xsl:template match="@*|text()|comment()">
    <xsl:copy/>
  </xsl:template>

  <!-- delete InfoPath PI node -->
  <xsl:template match="processing-instruction('mso-infoPathSolution')">
    <!-- output nothing -->
  </xsl:template>

  <!-- delete Office ProgID PI node -->
  <xsl:template match="processing-instruction('mso-application')">
    <!-- output nothing -->
  </xsl:template>

  <!-- delete others -->
  <xsl:template match="processing-instruction('MicrosoftWindowsSharePointServices')">
    <!-- output nothing -->
  </xsl:template>

</xsl:stylesheet>

  代码中应用了XSLT的template匹配以及系统函数,在配合到InfoPath额外信息节点时什么呢非出口,从而在终极的输出结果中将InfoPath额外信息过滤掉。

相关文章

网站地图xml地图