QXmlStreamReader和属性上的空namespaceUri()

问题描述:

这是一个XML问题,因为它是一个Qt问题:为什么foo元素的attr属性的名称空间uri的以下测试失败?QXmlStreamReader和属性上的空namespaceUri()

{ 
    const QString test("<foo xmlns='http://example.org/ns' attr='value'><empty/></foo>"); 

    QXmlStreamReader r(test); 
    QVERIFY(r.namespaceProcessing()); 
    QVERIFY(r.readNextStartElement()); 
    QCOMPARE(r.name().toString(), QLatin1String("foo")); 
    QCOMPARE(r.namespaceUri().toString(), 
      QLatin1String("http://example.org/ns")); 
    QVERIFY(!r.attributes().isEmpty()); 
    QCOMPARE(r.attributes().front().name().toString(), 
      QLatin1String("attr")); 

    // FAIL, namespaceUri() is empty: 
    QCOMPARE(r.attributes().front().namespaceUri().toString(), 
      QLatin1String("http://example.org/ns")); 
} 

这是一个QXmlStreamReader bug,或者是XML属性一般不与xmlns声明的名称空间?

XML属性不在xmlns声明的名称空间中。

有同样的问题,发现在specification of namespaces in XML答案:

默认命名空间声明适用于在其范围内的所有前缀的元素名称。默认名称空间声明不直接应用于属性名称;前缀属性的解释是由它们出现的元素决定的。