0

最近,我对使用 Windows 语音识别宏尝试一些 XML 和 Javascript 产生了兴趣。这是我对这两种语言的第一次体验,但由于我的编程历史很短,我认为我可以深入研究。到目前为止,它进展顺利。但是现在我正在尝试对我的宏实现更深层次的交互性,我开始遇到错误,我无法在网上找到解释,所以我来这里寻求你的帮助。

这是给我带来问题的宏:

<command>
    <listenFor>Whats the weather like in [CityName]</listenFor>
    <script language="JScript">
        <![CDATA[
            var xml_doc = new ActiveXObject("Microsoft.XMLDOM");
            xml_doc.async = false;
            xml_doc.load("http://api.openweathermap.org/data/2.5/weather?q={[CityName]}&mode=xml");

            var city = xml_doc.getElementByTagName("city").getAttribute("name");
            var temperature = xml_doc.getElementByTagName("temperature");

            Application.Speak(city);
        ]]>
    </script>
</command>

这是错误消息:

Error compiling grammar for speech Macros:
"AI-base.WSRMac"
==========
Line 40: 80045048 - Invalid rule reference to <RULEREF NAME="CityName" REFID=""/>
==========
00001:
00002: <GRAMMAR LANGID="0409">
...
...
...
00038: <RULE NAME="Rule_8">
00039:  <P>
00040:   <p>Whats the weather like in </p><ruleref name="CityName" propname="CityName" />
00041:  </P>
00042: </RULE>
00043: <RULE name="build:namedDictation"><dictation min="1" max="10"/></RULE>
00044: </GRAMMAR>

我试图用这个宏做的是从用户那里获取一个城市名称并获取该位置的天气,用几个变量输出它,然后让它以我喜欢的格式告诉我天气。

有人可以解释我做错了什么以及如何解决吗?

在此先感谢:) -Dirk

4

1 回答 1

1

据我所知,WSR 宏没有预定义的“CityName”属性。我见过的使用“CityName”的示例定义了具有适当属性的命名城市列表。例如,Weather.WSRMac 示例有

<listenForList name="CityName" propname="zipCode"> 
    <item propval="45255">Cincinnati</item> 
    <item propval="98075">Sammamish</item> 
    <item propval="98052">Redmond</item> 
    <item propval="98004">Bellevue</item> 
    <item propval="98101">Seattle</item> 
</listenForList> 

你需要做类似的事情。

如果您需要一个未解释的字符串,您可以尝试

 <rule name="CityName">
      <Dictation PROPID="Dictation" Min="1" Max="5"/>
 </rule>    

要在运行时检索内容,您应该能够使用

 xml_doc.load("http://api.openweathermap.org/data/2.5/weather?q={[CityName.Dictation]}&mode=xml");

几乎所有这些都可以在WSR Macros Wiki上找到,尤其是关于规则生成器的部分;SAPI 5 XML 语法的详细信息也在MSDN上。

于 2013-05-13T19:42:11.623 回答