1

这既是一个 Qt 问题,也是一个 XML 问题:为什么以下对元素attr属性的命名空间 uri 的测试会失败?foo

{
    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错误,还是 XML 属性通常不在用 声明的命名空间中xmlns

4

1 回答 1

1

XML 属性不在用 . 声明的命名空间中xmlns

有同样的问题,并在 XML 命名空间规范中找到了答案:

默认命名空间声明适用于其范围内的所有无前缀元素名称。默认命名空间声明不直接应用于属性名称;无前缀属性的解释由它们出现的元素决定。
于 2017-09-05T15:55:19.093 回答