文章检索
-
三系统安装 二氧化碳排放量 互联网森林 凤凰 前田约翰 塑料瓶 姓 岳阳 开源 张家界 扫地机器人 无效字符 来历 氏 电话骗局 简单法则 自由行 致命 致癌 节能灯泡 设计方式 说法 长沙 马子 骗子 android C# CMake CMS Durpal ExtJS Godaddy Google Code Google Sync Joomla js页面 linux mac opensuse roomba twitter window wordpress XHTML XML
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.
twitter
- @yegle 自己买个剪卡器吧,一次成功,嘿嘿
持续关注
Categories
广而告之
Category Archives: XML
又上了名字空间的套
在做一个XML的XSL,原XML如下: <?xml version="1.0" encoding="utf-16"?> <book version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns="http://docbook.org/ns/docbook"> <info> <title>test</title> <author> <personname> <othername>Unknown</othername> </personname> </author> <bibliosource>Unknown</bibliosource> </info> </book> 制作的XSL: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="info"> <xsl:value-of … Continue reading
实现HTML的简单压缩
PageReleaser需要一种HTML的压缩算法,Google了很久,发现如果只是简单去除空白和注释的话,使用XLinq就可以轻易的实现 先看看MSDN是怎么说的: 一种常用方案是读取缩进的 XML,在内存中创建一个没有任何空白文本节点(即不保留空白)的 XML 树,对该 XML 执行某些操作,然后保存带缩进的 XML。在序列化带格式的 XML 时,只保留 XML 树中有意义的空白。这是 LINQ to XML 的默认行为。 另一个常见的情况是读取和修改已经有意缩进的 XML。您可能不想以任何方式更改这种缩进。若要在 LINQ to XML 中执行此操作,您要在加载或解析 XML 时保留空白,并在序列化 XML 时禁用格式设置。 简单的说,XDocument载入时,默认使用LoadOptions::None,自动去掉XML的空白;保存时,默认使用SaveOptions::None,自动格式化XML。 也就是说,使用XDocument将一个HTML文档打开什么也不作就保存,其实等于实现了HTML的格式化。 而如果在保存时,使用SaveOptions::DisableFormatting参数,看似要保存XML的空白,由于载入时所有空白都被删掉了,其实等于删除了所有空白,于是去掉空白就这样实现了。 至于删掉注释也很简单,只是需要注意,一般页面嵌入JavaScript会使用注释节点包裹,需要例外处理。 整个HTML压缩代码如下: var nodes = from s in doc.DescendantNodes() where … Continue reading
集成Html Tidy
解析HTML最大的问题是不能使用标准的XML解析器,虽然很多新的网站开始逐步改用规范的XHTML,但只有出现一个<br>就会导致整个解析过程的失败,而好的HTML解析器却不是那么容易找到的,所以转换或许也是一个很好的选项 在google这个问题的时候,发现一个好东西HTML Tidy,W3C出品的,开源的小工具,可以将HTML转换成XHTML或XML HTML Tidy提供了编译好的exe文件,所以最初尝试在程序中通过进程方式直接调用,转换的速度很快,不过会出现一个控制台的黑窗口,大量处理时会比较麻烦。 后来查找Tidy的衍生库,发现EfTidy.net。EfTidy.net采用Warp技术,将C++的库直接引入到C#的项目中,用C#调用非常简单。可惜的是,这明显是老外的作品,没有考虑编码的问题,中文会被自动转换为类似#C2C8;这样的Unicode编码,显然这是无法忍受的。 之后又找到了Tidy的纯C#代码编写的库Tidy.net,虽然版本有点老且很难随Tidy的源版更新,不过毕竟是同源的C#代码,什么编码,语言之类的问题统统不存在,于是集成转换的问题解决了。 P.S. Tidy有很多各种各样的库,还有如Mark Tidy之类的,各有特点,大家有空可以试试,好用的话记得推荐给我哦:)
C#中使用Xslt 2.0处理器
用C#处理Xslt 2.0的时候,才发现原来.Net并没有提供对Xslt 2.0的支持,毕竟Xslt 2.0目前更多的还是纸面上的标准,而且微软的动作一向速度有限。 于是开始找专门的Xslt 2.0处理器。 首先找到的是Saxon,不知道是不是逐步商业化的缘故,Saxon版本显得有点凌乱。在9.1,分成商用的SA版,开源的B版;到了9.2又改成商用的EE企业版,PE专业版和开源的HE家庭版,加上每个版本又都分成java版和.Net版,看得都有点眼晕。 不管怎样直奔最新版本,先下了9.2 HE .NET版,结果发现处理中总是会有出现编码异常,貌似是Saxon的一个BUG,因为也其他有人碰到同样的问题,据说是换上9.1就没有好了。 于是换上9.1 B版,果然什么问题都没有了。察看文件9.2在支持库的部署方式上作了大的调整,可能是因为这个缘故导致的吧。(一个小问题,9.1中包含的IKVM.OpenJDK.ClassLibrary.dll,一个文件就26M,无论如此无法提交到Google Code,而在9.2中,这个大文件被分割成了几个相对小的问题) Saxon在调用上,最简单的方式是使用SaxonWarpper,代码类似.Net本身的方式。其实SaxonWarpper自己也不过是几行代码而已,所以直接调用Saxon也不会复杂到哪儿去,下面是一段处理Xslt 2.0的代码: /// <summary> /// 使用Saxon处理Xslt 2.0 /// </summary> /// <param name="strXml">字符串形式的XML数据</param> /// <param name="strXsl">字符串形式的XSLT数据</param> /// <returns>处理后的XML字符串</returns> public static string … Continue reading