XML SAX:在一个示例XML文件中解释`qName`和`localName`的结果

时间:2012-02-25 05:35:47

标签: java xml namespaces sax

我正在测试如何使用SAXParser并了解其组件。这是我用来测试的XML文件:

<?xml-stylesheet href="/externalflash/NASA_Detail/NASA_Detail.xsl" type="text/xsl"?>

<rss version="2.0">
    <channel>
        <title>NASA Image of the Day</title>
        <link>http://www.nasa.gov/multimedia/imagegallery/index.html</link>
        <description>The latest NASA "Image of the Day" image.</description>
        <language>en-us</language>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
        <managingEditor>yvette.smith-1@nasa.gov</managingEditor>
        <webMaster>brian.dunbar@nasa.gov</webMaster>

        <item xmlns:java_code="xalan://gov.nasa.build.Utils1"> 
            <title>Expedition 30 Cosmonauts Perform Spacewalk</title> 
            <link>http://www.nasa.gov/multimedia/imagegallery/image_feature_2181.html</link>
            <description>This image of Russian cosmonauts Oleg Kononenko and Anton Shkaplerov, both Expedition 30 flight engineers, was taken during a spacewalk on Thursday, Feb. 16, 2012. During the six-hour, 15-minute spacewalk, Kononenko and Shkaplerov moved the Strela-1 crane from the Pirs Docking Compartment in preparation for replacing it in 2012 with a new laboratory and docking module. The duo used another boom, the Strela-2, to move the hand-operated crane to the Poisk module for future assembly and maintenance work. Both telescoping booms extend like fishing rods and are used to move massive components outside the station. On the exterior of the Poisk Mini-Research Module 2, they also installed the Vinoslivost Materials Sample Experiment, which will investigate the influence of space on the mechanical properties of the materials. The spacewalkers also collected a test sample from underneath the insulation on the Zvezda Service Module to search for any signs of living organisms. Both spacewalkers wore Russian Orlan spacesuits bearing blue stripes and equipped with NASA helmet cameras. Image Credit: NASA</description>
            <guid isPermaLink="true">http://www.nasa.gov/multimedia/imagegallery/image_feature_2181.html</guid>
            <pubDate>Wed, 22 Feb 2012 00:00:00 EST</pubDate>
            <enclosure length="1234567" type="image/jpeg" url="http://www.nasa.gov/images/content/624856main_image_2181_516-387.jpg"/>
        </item>
    </channel>
</rss>

当我使用SAXParser测试此文件时,这是我的输出的一些部分:

start Element: rss
Local Name  // this line I don't know why null
qNam: rss
start characters: 

start Element: channel
Local Name 
qNam: channel
start characters: 

我的问题是:在我的XML文件中,没有namespace因此每个元素都属于其默认namespace,并且qName为什么等于local Name(因为没有prefix的{​​{1}}。

但是在上面的结果中,在元素qNamerss(以及我尚未发布的所有其他内容)中,channel为空!

请为谁解释。

谢谢:)

1 个答案:

答案 0 :(得分:3)

在Javadoc中有点不清楚:

  

uri - 名称空间URI,如果元素没有名称空间URI或者没有执行名称空间处理,则为空字符串

     

localName - 本地名称(不带前缀),如果没有执行名称空间处理,则为空字符串

     

qName - 限定名称(带前缀),如果限定名称不可用,则为空字符串

     

atts - 附加到元素的属性。如果没有属性,则它应为空的Attributes对象。 startElement返回后该对象的值是未定义的

关闭命名空间处理后,仅返回qName(没有前缀)。