Home  >  Article  >  Backend Development  >  A preliminary understanding of namespace in XML parsing

A preliminary understanding of namespace in XML parsing

黄舟
黄舟Original
2017-03-17 17:32:531847browse

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>

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>

When you see so many www, you don’t want to read it and just skip it, and then you see the familiar 48fe722b397613e801e59f453d6c9330 < ;/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.

52b189f45abba88b2989c5c1f30b7a34This line is not interesting, look here9c30e96d94e4a47fb4c15ace91b914c4noea6f540cddccdca7d953c18eb1eb3288, 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 5a37d16f53356ad61c30ba4c13522081 is different from e8aa4f7ce323535a9b01247c46fe6139, 02d8a117819869c76bcd3e50c8e21798. 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 5a37d16f53356ad61c30ba4c13522081 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 48fe722b397613e801e59f453d6c9330 is not naked, it is actually 3d535442830992583573ef76ba499fce, 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/";

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!

Statement:
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