Azure TTS Python SDK错误1007:XML根级别数据无效求助
Azure TTS SDK错误1007:XML根节点格式无效的解决方案
问题原因
你的代码存在两个核心问题导致Azure TTS返回错误1007:
- 命名空间前缀不匹配:lxml自动生成了
ns0、ns1这类随机前缀,但Azure TTS要求SSML使用标准前缀(mstts对应微软语音命名空间,默认命名空间无前缀) - Bytes字符串传递错误:
ET.tostring生成的是bytes对象,直接传递会导致XML开头出现b'标记,破坏XML结构
修正代码
from lxml.builder import ElementMaker from lxml import etree as ET # 明确指定命名空间与前缀映射 ns = { "": "https://www.w3.org/2001/10/synthesis", # 默认命名空间无前缀 "mstts": "https://www.w3.org/2001/mstts", # mstts前缀对应微软语音命名空间 "xml": "http://www.w3.org/XML/1998/namespace" } # 创建ElementMaker时指定正确的命名空间和前缀映射 E = ElementMaker(namespace=ns[""], nsmap=ns) TTS = ElementMaker(namespace=ns["mstts"], prefix="mstts") # 显式指定mstts前缀 xml_body = E.speak( {"version": "1.0", "{http://www.w3.org/XML/1998/namespace}lang": "en-US"}, E.voice( {"name": "en-US-JessaNeural"}, TTS.express_as( "That'd be just amazing!", type="cheerful", ) ) ) # 生成UTF-8编码的字符串而非bytes对象 ssml_string = ET.tostring(xml_body, encoding='unicode', method='xml') print(ssml_string)
修正后输出的SSML
<speak xmlns="https://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US"> <voice name="en-US-JessaNeural"> <mstts:express_as type="cheerful">That'd be just amazing!</mstts:express_as> </voice> </speak>
关键修改说明
- 指定命名空间前缀:创建
TTS这个ElementMaker时,通过prefix="mstts"强制使用标准前缀,避免lxml自动生成随机前缀 - 生成字符串而非bytes:使用
encoding='unicode'直接得到字符串,或者用ET.tostring(..., encoding='utf-8').decode('utf-8')将bytes转成UTF-8字符串,确保传递给Azure TTS的是纯XML文本
内容的提问来源于stack exchange,提问作者Cheezecaike
相关产品推荐
相关产品推荐

