2014-10-19 44 views
0

的SVG 1.1規範規定:解析SVG的轉換列表變換屬性

的「變換」屬性的值是變換列表,其被定義爲變換定義的列表 ,這些應用於提供的 訂單中。單個轉換定義由 空格和/或逗號分隔。

還舉了一個例子:

<g transform="translate(-10,-20) scale(2) rotate(45) translate(5,10)"> 
    <!-- graphics elements go here --> 
</g> 

我使用一個單獨的XML解析器獲得變換屬性的列表。是否有可能使用標準庫提供的工具完成解析工作,而不實施解析算法?

+0

給我們更大的圖片;你試圖解決的實際問題是什麼?你可能不需要解析它 – 2014-10-19 16:16:14

+0

識別和提取變換列表中的參數 – user1095108 2014-10-19 16:16:58

+0

我明白了,但是我真正要求的是*爲了什麼目的*? – 2014-10-19 16:17:40

回答

1

XML解析庫將(很可能)僅向您提供與解析樹中的屬性關聯的字符串值。

您將需要爲屬性值實現解析自己,或者找到執行此操作的svg解析庫。

+0

的確如此,但我正在尋找避免這種情況的方法。解析,我們程序員經常遇到的無知之牆。 – user1095108 2014-10-20 09:48:18

2

不符合標準庫。

但SVG ++庫1.0發佈了(https://github.com/svgpp/svgpp)。你可以使用它像這樣:

#include <svgpp/svgpp.hpp> 
#include <algorithm> 
#include <iterator> 

using namespace svgpp; 

struct Context 
{ 
    void transform_matrix(const boost::array<double, 6> & matrix) 
    { 
    std::copy(matrix.begin(), matrix.end(), 
     std::ostream_iterator<double>(std::cout, " ")); 
    std::cout << "\n"; 
    } 
}; 

int main() 
{ 
    Context context; 
    value_parser<tag::type::transform_list>::parse(tag::attribute::transform(), context, 
    std::string("translate(-10,-20) scale(2) rotate(45) translate(5,10)"), tag::source::attribute()); 
    return 0; 
} 

提升是必需的,但沒有額外的建築物或鏈接 - 庫僅標頭。