A preliminary understanding of namespace in XML parsing

黄舟
Release: 2017-03-17 17:32:53
Original
1914 people have browsed it

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=&#39;1&#39;>
     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 < ;/author>, I decisively apply the program in the above example, but I get nothing when I run it. What is the problem? C# provides a lot of XML classes, including XDocument, XReader, XPath, and . Children's shoes, let's calm down and take a look line by line.

This line is not interesting, look hereno, can be understood Yes, db is the abbreviation of a namespace, which is convenient for writing in front of the name of the element, so that is different from , . This abbreviation can distinguish variables in a document, but it is still not suitable for a large number of documents, so the namespace also has a full name, which is http://www.douban.com/xmlns/ here. In fact, this full name can be written in any content. For XML Parser, it is treated as string, but it is troublesome to think of a name. Secondly, it can be used as an advertisement, so everyone generally uses it. URL. When parsing, Parser distinguishes variables based on their full names, so even if there are in both documents, as long as the full names are different, there will be no problem.

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 is not naked, it is actually <"http://www.w3.org/2005/Atom": author>, so of course the naked program cannot parse it.

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template