【问题标题】:Sapi how to get elements inside tag elementsSapi如何获取标签元素内的元素
【发布时间】:2013-08-09 06:07:25
【问题描述】:

我有这样的语法

 <grammar xml:lang="en-US" version="1.0" xmlns="http://www.w3.org/2001/06/grammar" tag   format="semantics/1.0" root="number" mode="voice">
 <rule id="number" scope="public">
  <one-of>
        <item>1<tag>out.string="one"</tag><tag>out.Name="first"</tag></item>
        <item>2<tag>out.string="two"</tag><tag>out.Name="second"</tag></item>
  </one-of>
 </rule>
</grammar>

谁能帮助我如何访问标签元素中的元素。 例如。如果识别器识别 1 那么它应该给出 1 , one 和 first。

目前正在使用

ISpRecoResult* pResult = spevent.RecoResult();

LPWSTR pszCoMemResultText = NULL;
_hr = pResult->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE,&pszCoMemResultText,NULL);

pszCoMemResultText 根据识别给我“1”或“2”

谢谢

【问题讨论】:

  • &lt;tag&gt; 不是有效的SAPI 5.3 grammar element。您是指propid 属性还是valstr 属性?
  • Eric 是 sapi 的新手,对 propid 和 valstr 不太熟悉。我的目标是在识别器识别某些文本时返回键值对列表。我认为上面的语法 xml 会对我有所帮助完成它但没有运气。在哪个版本的 sapi 中是有效的语法元素?

标签: c++ sapi


【解决方案1】:

您使用的是 W3C 语法,而不是 SAPI 语法。傻我。

该数据存储在SPPHRASE 结构中,而不是文本中,因此您可以这样检索它:

ISpRecoResult* pResult = spevent.RecoResult();

SPPHRASE* pphrase;
hr = pResult->GetPhrase(&pphrase);
// your code here
CoTaskMemFree(pphrase);

现在,我还没有在 C++ 中使用过 W3C 语法,所以我不完全确定它是否与使用 SAPI 语法的方式相同,但假设 确实如此,标签数据以树的形式存储在pphrase-&gt;pProperties 中。

【讨论】:

  • 感谢 Eric,我必须为“字符串”和 pphrase->pProperties->pFirstChild->pszValue 和 pphrase->pProperties- 执行 pphrase->pProperties->pFirstChild->pszName >pFirstChild->pNextSibling->pszName 表示“名称”和 pphrase->pProperties->pFirstChild->pNextSibling->pszValue 表示“第一个”
猜你喜欢
  • 1970-01-01
  • 2018-01-28
  • 2013-05-13
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 2019-07-19
相关资源
最近更新 更多