【问题标题】:parse a xml in c++在 C++ 中解析一个 xml
【发布时间】:2010-10-29 06:45:28
【问题描述】:

我想解析这样的 xml。我的输出需要是 c 或 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>

【问题讨论】:

    标签: c++ xml parsing


    【解决方案1】:

    对于一个快速的 xml 解析器,它只需要转储到你的项目中而不需要依赖,我强烈推荐 TinyXML。

    http://www.grinninglizard.com/tinyxml/

    【讨论】:

      【解决方案2】:

      首先使用 XML 解析器(例如 Xerces、Expat 或 TinyXML)来解析您的 XML 文件并为输入转换构建数据结构。可能它将是一个对象列表,每个对象代表一个要匹配的模式和所需的输出。然后迭代单词中的字母,将它们与模式匹配。如果模式的数量很大,您可能希望有一个从字母到适用于它的模式列表的映射。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多