XLT格式化XML那点事(C#代码中的问题解决)(二)
2015-09-11 13:50
656 查看
接上篇《XML通过XSL格式化的那点事(XML到自定义节点折叠显示)》,本文就如何将大的XLST分割成小文件和如何用C#将XML通过XSL生成HTML文件中的问题做下分析,避免有同样需求的朋友走弯路。
应用示例,替换掉使用`Copy-of`的代码段
How to force Non-Self Closing tags for empty nodes when using XslCompiledTransform class
How to mimic copy-namespaces=“no” in XSLT 1.0?
Import的使用
<xsl:Import> 元素必须在第一个节点
如何避免输出SelfClose的非法元素
简单繁琐的办法
<script type="text/javascript" src="nowhere.js"> <xsl:comment></xsl:comment> </script>
一劳永逸的方法
不用XMLWriter使用自己定义的XMLHTMLWriterusing System; using System.Collections.Generic; using System.Text; using System.Xml; namespace XSLSelfClosing { public class XmlHtmlWriter : XmlTextWriter { public XmlHtmlWriter(System.IO.Stream stream, Encoding en) : base(stream, en) { //Put all the elemnts for which you want self closing tags in this list. //Rest of the tags would be explicitely closed fullyClosedElements.AddRange(new string[] { "br", "hr" }); } string openingElement = ""; List<string> fullyClosedElements = new List<string>(); public override void WriteEndElement() { if (fullyClosedElements.IndexOf(openingElement) < 0) WriteFullEndElement(); else base.WriteEndElement(); } public override void WriteStartElement(string prefix, string localName, string ns) { base.WriteStartElement(prefix, localName, ns); openingElement = localName; } } }
XSL Copy 函数会为节点自动添加xmlns的问题
解决方法:
添加如下模板<xsl:template match="*" mode="copy-no-namespaces"> <xsl:element name="{local-name()}"> <xsl:copy-of select="@*"/> <xsl:apply-templates select="node()" mode="copy-no-namespaces"/> </xsl:element> </xsl:template> <xsl:template match="comment()| processing-instruction()" mode="copy-no-namespaces"> <xsl:copy/> </xsl:template>
应用示例,替换掉使用`Copy-of`的代码段
<xsl:apply-templates select="$var1_SCTIcfBlkCredTrf/ns0:FIToFICstmrCdtTrf/sw8:CdtTrfTxInf" mode="copy-no-namespaces"/>
参考
XSLT self-closing tags issueHow to force Non-Self Closing tags for empty nodes when using XslCompiledTransform class
How to mimic copy-namespaces=“no” in XSLT 1.0?
相关文章推荐
- C# 读写Excel、CVS
- C#通用类库--DOS常用命令
- C# .net Emoji字体 Unicode编码转UTF16内码字符串输出
- C#高级------委托
- C#值类型和引用类型浅析
- C#高级------正则验证邮箱
- C# Enum 简易权限设计 使用FlagsAttribute属性
- C#输出日历
- C#—委托
- C#分部类和分部方法的使用
- C# volatile与lock
- C#—静态成员和实例成员
- c# tooltip 取消关联控件
- C# 执行存储过程
- c#-RTF文本编辑器
- c#验证串口可用性
- C#PictureBox释放图片内存问题
- C#版的抓包软件
- C#版Windows服务安装卸载小工具-附源码
- NetAnalyzer笔记 之 四. C#版的抓包软件