выбрать одно значение атрибута из нескольких с условным типом запроса xml в дереве XUL - PullRequest
0 голосов
/ 21 июня 2011

Это мой xml-файл: нужна помощь в написании правильного выражения xpath с использованием типа запроса xml

<?xml version="1.0" encoding="UTF-8"?>
<CONTACTS>
<CONTACT>
<PDE-Identity>N65539</PDE-Identity>
<FirstName>Arun_niit</FirstName>
<LastName>Arun_niit</LastName>
<Facebook-ID/>
<EMAILS>
<EMail Domain="yahoo" Value="nura_e@yahoo.co.in"/>
</EMAILS>
</CONTACT>
<CONTACT>
<PDE-Identity>N65553</PDE-Identity>
<FirstName>GhorbelMahmoud</FirstName>
<LastName>Mahmoud Ghorbel</LastName>
<Facebook-ID/>
<EMAILS>
<EMail Domain="alcatel-lucent" Value="mahmoud.gbel@alcatel-lucent.com"/>
</EMAILS>
</CONTACT>
<CONTACT>
<PDE-Identity>N65560</PDE-Identity>
<FirstName>keyankarthik</FirstName>
<LastName>karthik keyan</LastName>
<Facebook-ID/>
<EMAILS>
<EMail Domain="yahoo" Value="kartse@yahoo.co.in"/>
</EMAILS>
</CONTACT>
<CONTACT>
<PDE-Identity>N65567</PDE-Identity>
<FirstName>Rangarajkarthik</FirstName>
<LastName>karthik Rangaraj</LastName>
<Facebook-ID/>
<EMAILS>
<EMail Domain="gmail" Value="kart2006@gmail.com"/>
<EMail Domain="yahoo" Value="karthikngaraj@yahoo.com"/>
</EMAILS>
</CONTACT>
<CONTACT>
<PDE-Identity>N65576</PDE-Identity>
<FirstName>ReddyAkky</FirstName>
<LastName>Akky Reddy</LastName>
<Facebook-ID/>
<EMAILS>
<EMail Domain="gmail" Value="akkddych@gmail.com"/>
</EMAILS>
</CONTACT>
<CONTACT>
<PDE-Identity>N65597</PDE-Identity>
<FirstName>KumarVeera</FirstName>
<LastName>Veera_Kumar</LastName>
<Facebook-ID/>
<EMAILS>
<EMail Domain="yahoo" Value="KUMRg_81@yahoo.com"/>
</EMAILS>
</CONTACT>
</CONTACTS>

Мое дерево xul:

<treechildren datasources="file://D:/xmlparserinxul/finalxmlonfriday.xml" ref="*" querytype="xml">
   <template>
     <query expr="CONTACT">
       <assign var="?pde" expr="PDE-Identity"/>
       <assign var="?fname" expr="FirstName"/>
       <assign var="?lname" expr="LastName"/>
       <assign var="?gmail" expr="EMAILS/EMail/@Domain='gmail'|EMail/@Value"/>
       <assign var="?yahoo" expr="EMAILS/EMail/@Domain='yahoo'|EMail/@Value"/>
       <assign var="?alcatel-lucent" expr="EMAILS/EMail/@Domain='alcatel-lucent'|EMail/@Value"/>
       <assign var="?facebook" expr="URL"/>
       <assign var="?id" expr="Facebook-ID"/>
    </query>
     <action>
       <treeitem uri="?">
         <treerow>
           <treecell label="?pde"/>
           <treecell label="?fname"/>
           <treecell label="?lname"/>
           <treecell label="?gmail"/>
           <treecell label="?yahoo"/>
           <treecell label="?alcatel-lucent"/>
           <treecell label="?facebook" editable="false"/>
           <treecell label="?id" editable="false"/>
         </treerow>
       </treeitem>
     </action>
   </template>
 </treechildren>

 </tree>

Я не смог написать правильный запросговорить значения электронной почты в соответствии с доменом.Кто-нибудь, пожалуйста, помогите мне ... Я отредактировал предыдущий вопрос здесь ..

1 Ответ

1 голос
/ 22 июня 2011

Обычный подход заключается в использовании шаблонов 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.

...