Обычный подход заключается в использовании шаблонов XML и создании содержимого дерева автоматически, см. https://developer.mozilla.org/en/XUL/Template_Guide/XML_Templates и https://developer.mozilla.org/en/XUL/Template_Guide/XML_Assignments. В вашем случае это будет работать так:
<treechildren datasources="file:///D:/FinalXMl.xml" ref="*" querytype="xml">
<template>
<query expr="CONTACT">
<assign var="?fname" expr="FirstName"/>
<assign var="?lname" expr="LastName"/>
<assign var="?gmail" expr="EMAILS/EMail[Type='gmail']/Value"/>
<assign var="?yahoo" expr="EMAILS/EMail[Type='yahoo']/Value"/>
<assign var="?facebook" expr="Facebook-ID"/>
</query>
<action>
<treeitem uri="?">
<treerow>
<treecell label="?fname"/>
<treecell label="?lname"/>
<treecell label="?gmail"/>
<treecell label="?yahoo"/>
<treecell label=""/>
<treecell label="?facebook"/>
</treerow>
</treeitem>
</action>
</template>
</treechildren>
Обратите внимание, что это было бы проще (теги <assign>
не нужны), если бы вы могли изменить свой формат XML.Если вы поместите все данные в атрибуты тегов <CONTACT>
, вы сможете получить к ним доступ без явного присвоения переменных.
Похоже, что в конечном итоге вы захотите реализовать динамическую фильтрацию дерева, это должно сработать, изменив expr
атрибут тега <query>
динамически.Вы можете использовать любое выражение XPath, например, expr="CONTACT[FirstName='Bob']"
будет выбирать только контакты с FirstName
child, имеющим значение Bob
.