由XML Literal引發的思考

2021-09-05 23:33:05 字數 2003 閱讀 4203

首先,什麼是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

", _

newxelement(

"process

", _

newxattribute(

"threadcount", 

"2"), 

"some process"))

對於上述的**,我們可以使用更簡單的方式進行賦值,那就是直接將xml樹寫出來:

dim_xml 

=<

processes

>

<

process threadcount="

2">

some name

process

>

processes

>

這就是vb.net特有的xml literal了。這個特性不僅僅簡化了xelement構建的過程,更重要的是,我們可以在構建的過程中新增某些查詢!譬如下面的**(**出自xml literals overview):

contact2 

=<

contact

>

<

name

>

patrick hines

name

>

from p 

inphonenumbers2 

select

<

phone type

=p.type %

>>

p.number %

>

phone

>

%>

contact

>

看到這些例子,我著實被震撼了。vb.net對xml的支援力度可謂空前絕後了,甚至一些忠實的c#擁躉都因此拜倒在vb.net的石榴裙下。c#社群也紛紛要求為c#增加xml literal特性,更有甚者竭力找到了anders為大家留下的後門。對於xml literal有興趣的朋友,可以閱讀以下幾篇來自msdn的文章:xml literals overview和embedded expressions in xml。

對於xml的處理,vb.net有此銳器,那麼ironpython是否有相似的工具呢?michael搜腸刮肚、翻箱倒櫃才找到本屬於python的minidom模組,其中的parsestring方法擁有稍微接近的處理能力,但可惜的是,parsestring方法返回的物件只能是document物件,而非element,這也意味著parsestring並不擁有xml literal的魔力。

>>>

from

xml.dom.minidom 

import

parsestring

>>>

xmlelement 

=parsestring(

"""...     

...          some name

...     

...   

""")

[後記:]一位在youtube工作的牛人fredrik lundh早在2023年就提出了為python新增xml literal的功能,

但是直到現在還沒有出現類似的功能,至少michael現在還沒有找到

。有發現的朋友請告知一聲,衷心感謝! 

經過limodou兄的指點,michael找到了xml.etree.elementtree模組,其中的xml.etree.elementtree.xml(text)方法在一定程度實現xml literal特性,畢竟它返回的是element物件,那麼我們就可以基於此進行操作了。xml.etree.elementtree模組在ironpython 2.6下執行正常。

由 引發的思考

前陣子在乙個移動專案中,通過 的方式 繫結click 事件來提交乙個表單,由於表單資訊比較敏感,於是採用的post 同步提交的方式,原本到也沒有什麼。後來萬惡的pm說 你這個按鈕呀,要固定在底部比較好 於是乎就通過 position fixed 固定到底部了。那麼,問題來了 在ios 下,虛擬鍵盤是...

由CSS浮動 定位引發的對CSS標準流的思考

css標準流是一種css布局規則。之所以標準,是因為在不使用其它特殊的規則 如浮動 定位 下,css所預設的對html各種元素的排列規則。標準流是指元素會自動從左往右,從上往下的流式排列。並最終窗體自上而下分成一行行,並在每行中從左至右的順序排放元素。在html文件中,css將元素分為兩大類 塊級元...

由Typedef引發的問題

由typedef 引發的問題 自 用來宣告乙個別名,typedef 後面的語法,是乙個宣告。本來筆者以為這裡不會產生什麼誤解的,但結果卻出乎意料,產生誤解的人不在少數。罪魁禍首又是那些害人的教材。在這些教材中介紹 typedef 的時候通常會寫出如下形式 typedef int para 這種形式跟...