Tôi đã cố gắng để lấy các giá trị văn bản nút từ file XML này:Extracting giá trị nút con với QXmlItem như một QXmlQuery tập trung
<!DOCTYPE structure>
<data>
<x>
<id>1</id>
<nam>tytuł</nam>
<tab>21</tab>
<ind>5</ind>
<pre>TY</pre>
<khw>C.TY</khw>
</x>
<x>
<id>2</id>
<nam>autor</nam>
<tab>21</tab>
<ind>5</ind>
<pre>FO</pre>
<khw>C.FO</khw>
</x>
<x>
<id>3</id>
<nam>hasło korporatywne</nam>
<tab>21</tab>
<ind>5</ind>
<pre>FN</pre>
<khw>C.FN</khw>
</x>
</data>
Những gì tôi muốn làm là để lấy tất cả các nút và nó là trẻ em và chuyển đổi nó đến QMap. Tôi không có rắc rối với lấy phần tử duy nhất, nhưng khi nói đến lấy trẻ em mục bằng cách thiết lập kết quả của QXmlQuery như là một tập trung, các QString rằng tôi đánh giá các truy vấn nút con là trống rỗng. Tôi sử dụng đoạn mã này:
QXmlResultItems results;
QFile structure("./structure.xml"); // xml file, as described earlier
structure.open(QFile::ReadOnly);
QXmlQuery query;
query.setFocus(&structure);
query.setQuery("data/x");
query.evaluateTo(&results);
QXmlItem next = results.next();
while(!next.isNull()) {
qDebug() << next.toNodeModelIndex().stringValue(); // everything's fine. It prints contents of <x>'s child nodes
QXmlQuery childQuery;
QString r;
childQuery.setFocus(next);
childQuery.setQuery("./nam/text()"); // already tested: "/nam/text()", "/nam/string()", "x/nam/string()", "data/x/nam/string()" etc... still no luck.
childQuery.evaluateTo(&r);
qDebug() << r; // prints \n but it should print content of <nam> node.
next = results.next();
}
phần mềm tôi sử dụng: Qt 4.7.2 SDK trực tiếp từ trang web của Qt, QtCreator 2.3.1 trên Windows và Linux (không có bất kỳ sự khác biệt trong trường hợp đặc biệt này, kết quả đều giống nhau) . Tôi muốn chắc chắn đó là vấn đề của tôi thiếu kiến thức, chứ không phải là lỗi phần mềm, xin vui lòng giúp
Điều buồn cười là nó hoạt động với" ./ id/string() "hoặc thậm chí với" ./name/string() "nếu bạn đổi tên các thẻ" nam "thành" name ". – alexisdm
Dường như cùng một vấn đề được mô tả ở đây http://qt-project.org/forums/viewthread/25725 – CAMOBAP