.net下对具有名称空间的XML使用XPath的方法

xml

   这两天都在对一个其他公司提供的RSS接口进行编程,由于他们RSS提供的是1.0版本,其中的XML部分是有名称空间的,为此这一两天为了这个,摔了很多跟头,Unicode 编码的问题,XPath 的问题,XSLT 解析的问题。下面把这些问题的解决方法罗列出来,方便后来者。

        使用 XPath 的问题: 由于存在名称空间,你的XPath需要额外的通过 XmlNamespaceManager 类进行一些设置。这个方法是我在:http://www.error-bank.com/microsoft.public.dotnet.xml__35_R5x1v5$DHA.2040@TK2MSFTNGP12.phx.gbl_Thread.aspx 看到的,那里对这个问题的解决是:

Oleg Tkachenko [XML MVP, XmlInsider]
http://blog.tkachenko.com

解决的。非常感谢他在那里回答,让我找到了解决方法。下面是我的一个示例代码:

string ww = @"<item rdf:about=""http://ncsp.forum.nokia.com/download/?asset_id=10357""
xmlns:rdf=""http://www.w3.org/1999/02/22-rdf-syntax-ns#""
xmlns: dc=""http://purl.org/dc/elements/1.1/""
xmlns:ncsp=""http://ncsp.forum.nokia.com/"">
 <title>Advanced Audio Support v1.0</title>
<link>http://ncsp.forum.nokia.com/download/?asset_id=10357</link>
 <description>Media Server Audio Streaming plug-in installation file for Nokia 9200 Series Communicators. Deprecated - use the official audio stream plug-in instead, available from SDK v1.2 and later.</description>
 <dc:title xmlns: dc=""http://purl.org/dc/elements/1.1/"">Advanced Audio Support v1.0</dc:title>
 <dc:identifier xmlns: dc=""http://purl.org/dc/elements/1.1/"">10357</dc:identifier>
 <dc:language xmlns: dc=""http://purl.org/dc/elements/1.1/"">English</dc:language>
 <ncsp:filesize xmlns:ncsp=""http://ncsp.forum.nokia.com/"">7 kB</ncsp:filesize>
 <ncsp:class xmlns:ncsp=""http://ncsp.forum.nokia.com/"">Toolkit</ncsp:class>
</item>";
XmlReader read = new XmlTextReader(new StringReader(ww));
XPathDocument doc = new XPathDocument(read);
XPathNavigator nav = doc.CreateNavigator();
string strXPath = "/item/dc:identifier";
XPathExpression expr = nav.Compile(strXPath);
XmlNamespaceManager mngr = new XmlNamespaceManager(nav.NameTable);
mngr.AddNamespace("dc","http://purl.org/dc/elements/1.1/");
mngr.AddNamespace("ncsp","http://ncsp.forum.nokia.com/");
expr.SetContext(mngr);
XPathNodeIterator iter = nav.Select(expr);
string strVal = null;
if (iter.MoveNext()){
      strVal = iter.Current.Value;
}

XML+XSLT 解析的问题,出这个问题,最后发现是在XML的头上,多定义了一个名称空间造成的,删除这个名称空间就可以了。由于这些RSS,是其他公司提供的,害的我找自己的问题,找了很久。

 

时间: 2024-11-05 06:53:15

.net下对具有名称空间的XML使用XPath的方法的相关文章

创建、查询、修改带名称空间的 XML 文件的例子

xml|创建 XML的应用越来越广泛了,如Vista.Flex编程都将使用 XML,正确掌握XML的各种操作,对提高编程效率至关重要.下面就是一个综合处理带名称空间的XML的例子.C#:string w3NameSpace = "http://www.w3.org/2000/xmlns/";System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); //创建根节点System.Xml.XmlNode root = doc.Cre

asp.net下创建、查询、修改带名称空间的 XML 文件的例子_实用技巧

C#:  string w3NameSpace = "http://www.w3.org/2000/xmlns/";  System.Xml.XmlDocument doc = new System.Xml.XmlDocument();  //创建根节点  System.Xml.XmlNode root = doc.CreateNode(System.Xml.XmlNodeType.Element, "w", "wordDocument", &q

在 XML Schema和WSDL中使用名称空间

对于名称空间,理解了OO思想的人应该是比较简单的了,特别是对学过C++的人来说更是如此;但很多看了我前面文章的朋友,在和我的交流中,好像对名称空间都不怎么清楚,下面我们就来说说怎么样在 XML Schema和WSDL中使用名称空间.先看看一段JAVA代码: package com.hongsoft.test.pkg1; import com.hongsoft.test.pkg2.Test1; import com.hongsoft.test.pkg2.Test2;在这个文件中,我们把com.ho

(一一二)名称空间

在C++之中,名称可以是变量.函数.结构.枚举.类以及类和结构的成员.随着项目的增大,名称相互冲突的可能性也将增加.   使用多个厂商的类库时,可能导致名称冲突.   例如两个类库都定义了名称为List.Tree和Node的类,但定义的方式并不兼容(一个干这个,一个干那个),如果你需要使用第一个的List,第二个的Tree,你就不能一口气把两个类库都包含进去(就像using namespace std和using std::cout那样),这会导致冲突,被称为名称空间问题.     声明区域:

《C++游戏编程入门(第4版)》——1.3 使用std名称空间

1.3 使用std名称空间 C++游戏编程入门(第4版)因为经常要用到std名称空间中的元素,在此介绍两种不同的可以直接使用这些元素的方法,这样就不必总是使用std::前缀. 1.3.1 Game Over 2.0程序简介 Game Over 2.0程序的运行结果和图1.2所示的原始Game Over程序一模一样,但是区别在于访问std名称空间中元素的方式.从Cengage Learning网站(www.cengageptr.com/downloads上可以下载到该程序的代码.程序位于Chapt

PHP教程:PHP代码中的名称空间

在 PHP V5.3 中引入的名称空间是为 PHP 类.常量和函数提供上下文的一种方式,从而可以将使用相同名称的元素看作是惟一的.惟一的名称避免了命名冲突,当两个类或函数使用相同的名称时就会发生这种情况.有时这些 PHP 类表示现实世界中的相同对象,但它们的行为是完全不同的.名称空间能够确保您拥有正确的 PHP 类.常量或函数,并且要使用您的 PHP 类的人能够确保他们使用了正确的类. 代码中的名称空间就像现实世界中的上下文.考虑一个表示现实世界中的汽车对象的类.例如,通过 Internet 销

PHP V5.3 中的新特性,第 3 部分: 名称空间

很多语言都提供了名称空间特性,包括 C++ 和 Java 编程语言.引入名称空间是为了帮助组织大型的代码库,因为在大型代码库中,应用程序经常会出现函数名或类名重叠问题,这会引起其他问题.使用名称空间可以帮助识别代码提供的函数或实用程序,甚至可以帮助指定其来源.一个例子就是 C# 中的 System 名称空间,它包含有 .NET 框架提供的所有函数和类. 在其他未提供正式名称空间的语言中(比如 PHP V5.2 以及更早版本),人们常常通过在类或函数名中使用特定的命名约定来发挥名称空间的作用.比如

将某一目录下的所有相同格式的 XML文件绑定到不同的DataGrid

datagrid|xml 将某一目录下的所有相同格式的 XML文件绑定到不同的DataGrid的方法. <%@ Page Language="vb"%><%@ Import NameSpace = "System" %><%@ Import NameSpace = "System.Xml" %><%@ Import NameSpace = "System.IO" %><%@

ASPX文件中默认导入的名称空间

ASPX默认导入的名称空间可以直接引用了,使用其它的名称空间就的自行导入了. 默认名称空间  System  System.Collections  System.Collections.Specialized  System.Configuration  System.Text  System.Text.RegularExpressions  System.Web  System.Web.Caching  System.Web.Security  System.Web.Se