2010-10-29 79 views
0

我想解析一个xml。我的输出需要是c或C++中的代码,它们对音素中的每个字母进行转换。我在输入中引入了一个词,并且我生成的代码需要根据xml中的规则进行转换。任何sugestion为begening请...在C++中解析xml

<?xml version="1.0" encoding="UTF-8"?> 

<rules> 

<define_groups> 
    <cons>B,C,D,F,G,H,J,K,L,M,N,P,R,S,s,Q,W,T,t,V,X,Z</cons> 
    <vowel>A,a,E,I,i,O,U,Y</vowel> 
    <fric>S,s,t</fric> 
    <gr_h_O>B,F,G,L,X</gr_h_O> 
    <gr_EI>E,I</gr_EI> 
    <gr_CG>C,G</gr_CG> 
    <gr_AE>A,E</gr_AE> 
    <gr_AOU>A,O,U</gr_AOU> 
</define_groups> 

<phonemes> 
    <p>a</p> 
    <p>@</p> 
    <p>b</p> 
    <p>k</p> 
    <p>k_O</p> 
    <p>tS</p> 
    <p>d</p> 
    <p>e</p> 
    <p>e_X</p> 
    <p>f</p> 
    <p>g</p> 
    <p>dZ</p> 
    <p>g_O</p> 
    <p>h</p> 
    <p>i</p> 
    <p>1</p> 
    <p>j</p> 
    <p>i_O</p> 
    <p>Z</p> 
    <p>l</p> 
    <p>m</p> 
    <p>n</p> 
    <p>o</p> 
    <p>o_X</p> 
    <p>p</p> 
    <p>r</p> 
    <p>s</p> 
    <p>S</p> 
    <p>t</p> 
    <p>ts</p> 
    <p>u</p> 
    <p>w</p> 
    <p>v</p> 
</phonemes> 

<letters> 
    <l>A</l> 
    <l>a</l> 
    <l>B</l> 
    <l>C</l> 
    <l>D</l> 
    <l>E</l> 
    <l>F</l> 
    <l>G</l> 
    <l>H</l> 
    <l>I</l> 
    <l>i</l> 
    <l>J</l> 
    <l>K</l> 
    <l>L</l> 
    <l>M</l> 
    <l>N</l> 
    <l>O</l> 
    <l>P</l> 
    <l>Q</l> 
    <l>R</l> 
    <l>S</l> 
    <l>s</l> 
    <l>T</l> 
    <l>t</l> 
    <l>U</l> 
    <l>V</l> 
    <l>W</l> 
    <l>X</l> 
    <l>Y</l> 
    <l>Z</l> 
</letters> 

<for_A> 
    <r><t>a</t></r> 
</for_A> 

<for_a> 
    <r><t>@</t></r> 
</for_a> 

<for_D> 
    <r><t>d</t></r> 
</for_D> 

<for_F> 
    <r><t>f</t></r> 
</for_F> 

<for_i> 
    <r><t>1</t></r> 
</for_i> 

<for_J> 
    <r><t>Z</t></r> 
</for_J> 

<for_K> 
    <r> 
     <right>gr_EI</right> 
     <t>k_O</t> 
    </r> 
    <r> 
     <t>k</t> 
    </r> 
</for_K> 

<for_E> 
    <r> 
     <left>=</left> 
     <right>L</right> 
     <right>=</right> 
     <t>j e</t> 
    </r> 
    <r> 
     <left>E</left> 
     <t>j e</t> 
    </r> 
    <r> 
     <t>e</t> 
    </r> 
</for_E> 

<for_U> 
    <r> 
     <left>cons</left> 
     <right>A</right> 
     <t>u w</t> 
    </r>  
    <r> 
     <left>vowel</left> 
     <right>A</right> 
     <t>u w</t> 
    </r>  
    <r> 
     <left>cons</left> 
     <right>E</right> 
     <t>u</t> 
    </r>  
    <r> 
     <left>cons</left> 
     <right>cons</right> 
     <t>u</t> 
    </r>  
    <r> 
     <left>C</left> 
     <left>I</left> 
     <right>=</right> 
     <t>w</t> 
    </r>  
    <r> 
     <left>vowel</left> 
     <right>=</right> 
     <t>w</t> 
    </r>  
    <r> 
     <left>I</left> 
     <t>u</t> 
    </r>  
    <r> 
     <left>O</left> 
     <right>L</right> 
     <t>u</t> 
    </r>  
    <r> 
     <left>U</left> 
     <t>u</t> 
    </r>  
    <r> 
     <right>U</right> 
     <t>u</t> 
    </r>  
    <r> 
     <right>A</right> 
     <t>w</t> 
    </r>  
    <r> 
     <left>Z</left> 
     <right>A</right> 
     <t>u</t> 
    </r>  
    <r> 
     <right>I</right> 
     <t>u</t> 
    </r>  
    <r> 
     <right>a</right> 
     <t>w</t> 
    </r>  
    <r> 
     <right>E</right> 
     <right>A</right> 
     <t>w</t> 
    </r>  
    <r> 
     <right>E</right> 
     <t>u</t> 
    </r>  
    <r> 
     <right>A</right> 
     <right>=</right> 
     <t>w</t> 
    </r>  
    <r> 
     <t>u</t> 
    </r> 


</rules> 

回答

2

首先使用XML解析器(例如XercesExpatTinyXML)来解析XML文件和构建输入变换的数据结构。可能它会是一个对象列表,每个对象表示要匹配的模式和所需的输出。然后遍历字符中的字母,使其与模式匹配。如果模式的数量很大,您可能需要从字母到适用于该模式列表的图谱。

1

我通常使用lex/yacc或ANTLR来解析相关的suff。 ANTLR非常容易学习/编码。

2

对于一个快速的xml解析器而言,只需要将它转储到您的项目中而不需要依赖项,我强烈建议使用TinyXML。

​​