XML code<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>火影忍者</title>
<item>
<title>第一集</title>
</item>
<item>
<title>第二集</title>
</item>
</channel>
</rss>
JScript code
XmlListModel{
id:channels
source: "xx.xml"
query: "/rss/channel/item"
XmlRole{name:"tvname"; query:"title/string()" }//能通过代理(delegate)的Text能显示每个item下title,(如果有多个title则不能,需要加下标,很麻烦)
}
这种情况下如何显示上级标签的火影忍者呢?listview中delegate:item{ Text{ text:tvname } }
JScript code
XmlListModel{
id:channels
source: "xx.xml"
query: "/rss/channel"
XmlRole{name:"tvname"; query:"title/string()"} //能访问到火影忍者 }
如果要访问第一集第二集则需要 XmlRole{name:"name1"; query:"item[1]/title/string()"} 需要加下标才能访问第一集
XmlRole{name:"name2"; query:"item[2]/title/string()"} 需要改变name里面的别名和查询里面的下标才能访问第二集。
为了让每级标签的title都能显示,这个方法显然很繁琐。但第一个方法我想不到该如何查询“火影忍者”
方法2中的代理:
listview中delegate:item{ Text{ text:tvname }; Text{ text:name1 }; Text{ text:name2 }; } 注:这里只是简单写了一下代理,总之引用xmlrole方法是这样,繁琐得很。假如同级标签里有很多title,那不是还得逐一逐一的xmlrole,逐一逐一的Text??
思来想去,尝试了些方法都不行。所以又来向各路大哥来讨教一下了,谢谢了。在xmllistmodel中query设置好了查询路径之后,qml中有什么简单一点的方法能实现xml上下级标签多个字符串同时显示呢?
JScript code
query: "//title"
XmlRole {name: "tvname"; query: "./string()"}
XPath中约定:
“//” 表示从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
“.” 表示选取当前节点的内容
我顺便去学习了一下xpath,原来有很多访问数据方式。本想在一个xmllistmodel里面访问各级标签。而且xpath里面可以有多个查询路劲,通过一个“|”符号将路径链接。但在qml里面的情况似乎又不太一样。最后我还是用了另外的方法,针对不同级的标签,建立id和查询路劲各不相同的xmllistmodel,最后通过js来改变某个xmllistmodel的查询路径,来达到取不同的数据。