The most common problem that beginners encounter when parsing XML files is probably the XML namespace. This article aims to give a brief introduction to namespace.
Needless to say the meaning of namespace. Like C++, C# and other high-level languages, XML also faces the problem of duplicate names of variables when a large number of files are put together, so namespace must be used to change the name. Variables with the same meaning but different meanings are isolated. This article focuses on the parsing method of namespace.
The following is a simple XML file:
<root> <child id = ‘0’> hello world </child> <child id='1'> one </child> </root>Copy after login
There is no namespace in this example. I am afraid that this is the case when you first learn XML. This kind of example is misleading. After beginners parse hello world, they happily use the same program to parse actual XML files, and often fail. The following is an XML file returned by DoubanAPI
<?xml version="1.0" encoding="UTF-8"?> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:db="http://www.douban.com/xmlns/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:opensearch="http://a9.com/-/spec/opensearchrss/1.0/"> <id>http://api.douban.com/event/10069638</id> <title>Debugging the Web </title> <category scheme="http://www.douban.com/2007#kind" term="http://www.douban.com/2007#event.salon"/> <author> <link href="http://api.douban.com/people/1057620" rel="self"/> <link href="http://www.douban.com/people/aka/" rel="alternate"/> <link href="http://t.douban.com/icon/u1057620-16.jpg" rel="icon"/> name>胖胖的大头鱼</name> <uri>http://api.douban.com/people/1057620</uri> </author> <db:attribute name="invite_only">no</db:attribute>Copy after login
When you see so many www, you don’t want to read it and just skip it, and then you see the familiar
This line is not interesting, look here
This makes it clearer, but what exactly is http://www.w3.org/2005/Atom? It doesn’t even have an abbreviation. Hey, you're right when you realize this. His abbreviation is "", empty string. This thing is called the default namespace, and those that appear to have no prefix are under this namespace. So the
So how to parse it? Here is a sample program, I hope it will be helpful to everyone. This code works on WP7. I also have a version of XmlDocument, but WP7 doesn’t have this class, it’s a bummer. . .
string file = @"C:\Users\v-menlin\Documents\Visual Studio 2010\Projects\test\test\test.xml"; XDocument doc = XDocument.Load( file ); //use following code to parse a string //XDocument doc = XDocument.Parse( string ); //对于XML文件中所有的没加类似db:这种的元素,用下列方法 XNamespace d = @"http://www.w3.org/2005/Atom"; foreach ( XElement element in doc.Descendants( d + "title" ) ) { Console.WriteLine( element.Value ); } //<author>下面包含了<link>,一下的例子还示例了如何读取属性。 foreach ( XElement element in doc.Descendants( d + "author" ) ) { foreach ( XElement inelement in element.Descendants( d + "link" ) ) { Console.WriteLine( inelement.Attribute( "href" ).Value ); Console.WriteLine( inelement.Attribute( "rel" ).Value ); } } Console.WriteLine(); //对于加了冒号前缀的元素,使用下列代码 XNamespace db = @"http://www.douban.com/xmlns/"; foreach ( XElement element in doc.Descendants( db + "attribute" ) ) { Console.WriteLine( element.Attribute( "name" ).Value ); Console.WriteLine( element.Value ); } //其实只是NameSpace的头部换了一下。 //下面列出其他几个常用头部,直接换用。 XNamespace gd = @"http://schemas.google.com/g/2005"; XNamespace opensearch = @"http://a9.com/-/spec/opensearchrss/1.0/";Copy after login
The above is the detailed content of A preliminary understanding of namespace in XML parsing. For more information, please follow other related articles on the PHP Chinese website!