一年多没在首页露脸了,昨天凌晨写就了一篇有关IronPython的随笔,发布的时候我确实有点诚惶诚恐。不过还好,至少引得几位朋友的围观,还能碰上老朋友木野狐,我心足矣!木野狐在评论中给我留下了一个非常棒的问题:“IronPython能否模拟或者接近vb.net的xml literal那样的语法?”尽管我对IronPython处理XML的能力自信满满,但是,面对XML Literal这样的词汇,我有点踌躇了。于是,我开始了一系列的研究。

首先,什么是XML Literal呢?原来,这是在VB.NET 9.0才引入的一个用于构建XML对象的新特性,并且只有VB.NET 9.0才支持。我们都知道,要创建XML树,可以使用Linq中的API,如下所示(代码出自VB.NET 9.0: XML Literal):

Dim _xml2 = New XElement("ProcessList", _
                
New XElement("Process", _
                    
New XAttribute("ThreadCount""2"), "Some Process"))

对于上述的代码,我们可以使用更简单的方式进行赋值,那就是直接将XML树写出来:

Dim _xml = <Processes>
               
<Process ThreadCount="2">Some Name</Process>
           
</Processes>

这就是VB.NET特有的XML Literal了。这个特性不仅仅简化了XElement构建的过程,更重要的是,我们可以在构建的过程中添加某些查询!譬如下面的代码(代码出自XML Literals Overview):

Dim contact2 = 
        
<contact>
          
<name>Patrick Hines</name>
          
<%= From p In phoneNumbers2 
            
Select <phone type=<%= p.Type %>><%= p.Number %></phone> 
          %
>
        
</contact>

相关文章: