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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM