使用默认值嵌套XML命名空间

时间:2015-08-05 20:50:24

标签: xml namespaces xml-namespaces

嵌套XML名称空间的正确方法是什么?

我必须这样做:

<?xml version="1.0"?>
<top xmlns="http://url1" xmlns:b="http://url2">
    <b:second>
    </b:second>
</top>

或者是以下确定

<?xml version="1.0"?>
<top xmlns="http://url1">
    <b:second xmlns:b="http://url2">
    </b:second>
</top>

另外,将第二级设置为默认值是否可以?例如:

<?xml version="1.0"?>
<a:top xmlns:a="http://url1">
    <second xmlns="http://url2">
    </second>
</a:top>

是否应将第二级声明为在第一级命名空间中?

<?xml version="1.0"?>
<a:top xmlns:a="http://url1">
    <a:second xmlns="http://url2">
        <third>text</third>
    </a:second>
</a:top>

1 个答案:

答案 0 :(得分:0)

所有这些都是&#34;好的&#34;只要名称空间继承规则为您提供了您想要的结果。

检查的一个好方法是将其传递给一个解析器,该解析器告诉您每个元素所在的命名空间。有许多方法可以为该cat设置外观。这是一个简单的java程序:

-CAfile

如果您使用的是Linux,则以下是一个稍微冗长的等价物:

import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class Parse
{
    public static void main(String[] args)
    {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            factory.setNamespaceAware(true);
            SAXParser parser = factory.newSAXParser();
            parser.parse(new File(args[0]), new Handler());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    static class Handler extends DefaultHandler
    {
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
            System.out.println("qName="+qName+" uri="+uri);
        }
    }
}