解析某些特殊格式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

时间: 2024-07-31 07:50:45

解析某些特殊格式XML文件时,获取不到根节点问题的相关文章

Android学习之XML数据的三种解析方式以及生成XML文件

首先,我得声明,本博客的思想主要参考了此博客:http://blog.csdn.net/liuhe688/article/details/6415593 不过代码我自己一句句敲的 好了,首先讲一下解析XML的三种方式:(恕我粘贴一下哈) SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu

利用XPath解析带有xmlns的XML文件

在.net中,编写读取xml 的程序中提示"未将对象引用设置到对象的实例",当时一看觉得有点奇怪.为什么在读取xml数据的时候也要实例化一个对象.google了才知道,xml文件中加入了xmlns表示名称空间,但同时Xpath也必须加上. 如之前我们的xml文件定义为: <Project Name="目标计划项目"> <Process Name="个人月度计划" Description="个人月度计划" Ve

python解析GBK格式xml文件

xml文件 <?xml version="1.0" encoding="GBK"?> <records serial_number="1"> <record id="1" name="admin" password="admin" auth="1" email="" receivedMail="0"

JAVA抓取网页内容、生成kindle支持的mobi格式的文件时可能会遇到的问题及解决方案

问题1:内容抓取Batch在解析rss时,有的网站的rss中明明有发布时间,但获取的发布时间始终为null. 原 因:那些网站的rss的发布时间格式不符合Rome.jar的要求,无法解析,所以返回null. 解决方案:修改Rome.jar的源码,在com/sun/syndication/rome.properties中增加             datetime.extra.masks属性,用于适应多种发布日期的格式.             如: datetime.extra.masks=y

xml文件时第一行无缘无故报错

错误信息: Referenced file contains errors (http://www.puppycrawl.com/dtds/configuration_1_3.dtd). For more information, right click on the message in the....之类的. 我这里是做的是spring的applicationContext.xml文件的,所以会报spring框架的约束格式错误. 下面总结一下几种解决办法. 第一种:点击eclipse左上角菜

有WebService的项目中写applicationContex.xml文件时应注意!!!

这是一个简单的WebService实例,来看下如下的applicationContex.xml文件: 1.有XFire的配置 <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true"> <property name="serv

解析XML文件时做得修改

在.h文件中找到需要在Build Settings中设置的东西, 随后在Build Settings中进行设置,

dom4j解析带命名空间的xml文件

文件内容如下 <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/"> <string>浙江</string> <string>杭州</string> <