簡體   English   中英

用Nokogiri解析TextMate片段

[英]Parse TextMate snippet with Nokogiri

TextMate代碼段(.tmSnippet)通常看起來像這樣,而某些鍵/字符串對是可選的,並且可以位於任何位置。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>content</key>
        <string>${1:the actual snippet}</string>
        <key>tabTrigger</key>
        <string>my_trigger</string>
        <key>name</key>
        <string>This is my Snippet's name</string>
        <key>scope</key>
        <string>source.js</string>
        <key>uuid</key>
        <string>6C2985F1-9BB8-43D7-A85C-1006B2932A0D</string>
</dict>
</plist>

我正在嘗試使用Nokogiri來解析它,但是由於標簽都是<key><string>並且每個鍵/字符串對的位置都可以改變,所以我不確定該怎么做。 我關注scopetabTriggercontentname

假設dict節點的子節點只是key - string對,則:

require 'nokogiri'

kws = %w{ scope tabTrigger content name }

doc = Nokogiri::XML(File.read('a.tmsnippet'))

doc.xpath('//dict').each do | dict_node |
  dict_node.element_children.map(&:content).each_slice(2) do | k, v |
    next unless kws.include? k
    puts "#{k} -> #{v}"
  end
end

產生

"content -> ${1:the actual snippet}
tabTrigger -> my_trigger
name -> This is my Snippet's name
scope -> source.js"

否則,在查看節點類型之前,您需要有關節點類型的更多邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM