首页 > 代码库 > 解析某些特殊格式XML文件时,获取不到根节点问题
解析某些特殊格式XML文件时,获取不到根节点问题
还是在语音识别这块。在读取本地的SRGS的XML后,无法获取到根节点<grammar>。
下面是SRGS.XML文件(只给出了根节点)
<?xml version="1.0" encoding="utf-8" ?>< grammar version="1.0" xml:lang="zh-cn" root="mediaMenu" tag-format="semantics/1.0" xmlns="http://www.w3.org/2001/06/grammar" xmlns:sapi="http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions">< grammar/>
对于这个通过以下解析方式,
StorageFile xmlFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///SRGSGrammar.xml"));//获取本地文件 string xmlString = await FileIO.ReadTextAsync(xmlFile);XDocument xml = XDocument.Parse(xmlString);
XElement root = xml.Element("grammar");//获取grammar节点
获取不到根节点grammar, root值为null
而将xmlns="http://www.w3.org/2001/06/grammar“
改为xmlns:a="http://www.w3.org/2001/06/grammar"
则能够获取到,这是本身的没有:a的格式才对语音识别需要的正确格式。
这是因为标准的SRGS中,默认的namespace 是 http://www.w3.org/2001/06/grammar, 我们在定位元素时,是需要指定XNamespace的:
XDocument xml = XDocument.Parse(xmlString);
XNamespace nsSRGSG = "http://www.w3.org/2001/06/grammar";XElement root = xml.Element(nsSRGSG + "grammar");//获取grammar节点
通过上述就能获取到了。
详见MSDN文档:
#XNamespace Class http://msdn.microsoft.com/en-us/library/system.xml.linq.xnamespace(v=vs.110).aspx
解析某些特殊格式XML文件时,获取不到根节点问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。