使用SAX解析Java中的XML文件时,SAX方法中的参数localName
和qName
之间有什么区别,例如
startElement(String uri, String localName, String qName, Attributes attributes)
有时我可以从localName
获得一个值,但现在我什么也得不到。
一个SAXParserFactory的修订版是884950;其他的是1.5。我根本不使用命名空间。这有关系吗?
答案 0 :(得分:3)
是的,您是否使用名称空间非常重要,具体而言,SAX如何配置使用它们......
qName是完整的qualified name,包括namespace prefix(如果有)和localName。
所以,对于abc:xyz
abc
。xyz
。abc:xyz
。配置命名空间处理有两个关键功能:
http://xml.org/sax/features/namespaces
(名称空间)http://xml.org/sax/features/namespace-prefixes
( namespace-prefixes )他们的设置会影响通过 uri , localName 和 qName 报告给startElement
的值,
public void startElement (String uri, String localName,
String qName, Attributes atts)
throws SAXException;
可能与您的期望不同的组合。请考虑以下examples:
配置示例
请考虑以下简单示例文档:
<?xml version="1.0"?> <h:hello xmlns:h="http://www.greeting.com/ns/" id="a1" h:person="David"/>
如果名称空间为true且名称空间前缀为false( 默认情况下,然后SAX2 XML阅读器将报告以下内容:
- 具有命名空间URI&#34; http://www.greeting.com/ns/&#34;的元素和localName&#34;你好&#34 ;;
- 没有名称空间URI(空字符串)和qName(通常是localName)&#34; id&#34 ;;和
- 具有命名空间URI&#34; http://www.greeting.com/ns/&#34;的属性和localName&#34; person&#34;。
如果名称空间为true且名称空间前缀为true,则为SAX2 XML阅读器将报告以下内容:
- 具有命名空间URI&#34; http://www.greeting.com/ns/&#34;,localName&#34; hello&#34;和qName&#34; h:hello&#34 ;; 的元素LI>
- 没有名称空间URI(空字符串),没有localName(空字符串)和qName&#34; xmlns:h&#34;;
的属性- 没有名称空间URI的属性(空字符串),qName(通常是localName)&#34; id&#34 ;;和
- 属性名称空间URI&#34; http://www.greeting.com/ns/&#34;,localName&#34; person&#34;和qName&#34; h:person&#34;。
如果名称空间为false且名称空间前缀为true,则为SAX2 XML阅读器将报告以下内容:
- 具有qName&#34; h:hello&#34;;
的元素- 具有qName&#34; xmlns:h&#34 ;;
的属性- 具有qName&#34; id&#34;的属性;和
- qName&#34; h:person&#34;。
的属性请注意,当SAX2报告名称空间声明属性时,例如 &#34; xmlns:h&#34;,它符合XML中的命名空间建议 W3C:它们不在任何名称空间中。其他一些W3C规范 违反该规范,并将此类声明放入 http://www.w3.org/2000/xmlns/命名空间。如果您正在与之合作 命名空间声明,您可能需要了解该问题。