You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure TTS Python SDK错误1007:XML根级别数据无效求助

Azure TTS SDK错误1007:XML根节点格式无效的解决方案

问题原因

你的代码存在两个核心问题导致Azure TTS返回错误1007:

  1. 命名空间前缀不匹配:lxml自动生成了ns0、ns1这类随机前缀,但Azure TTS要求SSML使用标准前缀(mstts对应微软语音命名空间,默认命名空间无前缀)
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:13:21