Как получить значения дочерних элементов из родительского узла из синтаксического анализа XML-файла в JavaScript в XUL - PullRequest
0 голосов
/ 29 июня 2011

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

<CONTACT>
<PDE-Identity>N65567</PDE-Identity>
<FirstName>Rangarajkarthik</FirstName>
<LastName>karthik Rangaraj</LastName>
<Facebook-ID/>
<EMAIL>
<Type>gmail</Type>
<Value>kart06@gmail.com</Value>
<Type>yahoo</Type>
<Value>karthikngaraj@yahoo.com</Value>
</EMAIL>
</CONTACT>

Как я могу проанализировать значение типа для моего текстового поля в XUL, используя цикл? В некоторых контактных узлах нет Gmail, а в некоторых контактных узлах нет адреса электронной почты Yahoo. Я действительно запутался здесь ...

<row>
    <label value="Gmail"/>
    <textbox id="gmail" value=""/>
</row>
<row>
    <label value="Yahoo"/>
    <textbox id="yahoo" value=""/>
</row> 

Это то, что я имею до сих пор:

var str=x[i].getElementsByTagName("Value")[0].childNodes[0].nodeValue;
document.getElementById("gmail").value=str;

Это не работает.

XUL код:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" oncommand="init();">

  <grid>
    <columns>
      <column flex="1"/>
      <column flex="4"/>
       <column flex="4"/>
      <column flex="4"/>
       <column flex="4"/>
    </columns>

    <rows>
      <row>
<label control="" value="Select PDE-ID:"/>
<menulist id="List" oncomman="">
               <menupopup  id="Popup">
               </menupopup>
</menulist>

      </row>
    </rows>
</grid>

<label control="" accesskey="" value=""/>
  <grid>
    <columns>
      <column flex="1"/>
      <column flex="4"/>
        <column flex="4"/>
        <column flex="4"/>
<column flex="4"/>
    </columns>

    <rows>
      <row>
        <label value="PDE-Identity"/>
        <textbox id="pde" value=""/>
      </row>
      <row>
        <label value="FirstName"/>
        <textbox id="fname" value=""/>
      </row>
      <row>
        <label value="LastName"/>
        <textbox id="lname" value=""/>
      </row>
      <row>
          <label value="Gmail"/>
        <textbox id="gmail" value=""/>
      </row>
      <row>
          <label value="Yahoo"/>
        <textbox id="yahoo" value=""/>
      </row>
      <row>
          <label value="Alcatel-Lucent"/>
        <textbox id="alcatel-lucent" value="" />
      </row>
      <row>
          <label value="URL"/>
        <textbox id="facebook" value="" />
      </row>
      <row>
          <label value="Facebook-ID"/>
        <textbox id="fid" value="" />
      </row>
    </rows>
  </grid>
<label  value=""/>
<grid>
    <columns>
        <column flex=""/>
    <hbox align="center" >
        <button id="save"   label="next"   oncommand="next()" />
        <button id="cancel" label="previous" oncommand="previous()"/>
        <button id="delete" label="Merge"  oncommand="delete();"/>        
    </hbox>
</columns>
</grid>


<separator/>
<text value="© 2011"/>
<separator/>


<script type="application/x-javascript">
<![CDATA[




var objXMLDoc = document.implementation.createDocument('','doc',null);
var objXMLHTTP = new XMLHttpRequest();

objXMLHTTP.open("GET", "file://D:/xmlparserinxul/final.xml", false);
objXMLHTTP.send(null);
objXMLDoc = objXMLHTTP.responseXML;

var objNodeList = objXMLDoc.getElementsByTagName("PDE-Identity");
   for (var i=0; i<objNodeList.length; i++){
            var menuPopup=document.getElementById('Popup');             
                     var menu1=document.createElement("menuitem");
                        menu1.setAttribute("label",'objNodeList');
                       menuPopup.appendChild(menu1);
}


var x = objXMLDoc.getElementsByTagName("CONTACT");
i=0;

function init()
{

var str=x[i].getElementsByTagName("PDE-Identity")[0].childNodes[0].nodeValue;
document.getElementById("pde").value=str;

var str=x[i].getElementsByTagName("FirstName")[0].childNodes[0].nodeValue;
document.getElementById("fname").value=str;

var str=x[i].getElementsByTagName("LastName")[0].childNodes[0].nodeValue;
document.getElementById("lname").value=str;

/*var str=x[i].getElementsByTagName("Type")[0].childNodes[0].nodeValue;
document.getElementById("gmail").value=str;

var str=x[i].getElementsByTagName("Type")[0].childNodes[0].nodeValue;
document.getElementById("yahoo").value=str;

var str=x[i].getElementsByTagName("Type")[0].childNodes[0].nodeValue;
document.getElementById("alcatel-lucent").value=str; */

var str=x[i].getElementsByTagName("URL")[0].childNodes[0].nodeValue;
document.getElementById("facebook").value=str;

var str=x[i].getElementsByTagName("Facebook-ID")[0].childNodes[0].nodeValue;
document.getElementById("fid").value=str;

}

function next()
{

document.getElementById('facebook').value='';
document.getElementById('fid').value='';
//alert('fool');
if (i<x.length-1)
  {
  i++;
  init();

  }
}

function previous()
{

document.getElementById('facebook').value='';
document.getElementById('fid').value='';

if (i>0)
  {

  i--;
  init();

  }
}


]]>
</script>

</window>

Мой файл 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/>
<EMAIL>
<Type>yahoo</Type>
<Value>nura_ie@yahoo.co.in</Value>
</EMAIL>
</CONTACT>
<CONTACT>
<PDE-Identity>N65546</PDE-Identity>
<FirstName>FodenBen'</FirstName>
<LastName>Ben' Foden</LastName>
<URL>http://www.facebook.com/profile.php?id=100002440474277</URL>
<Facebook-ID>100002440474277</Facebook-ID>
<EMAIL/>
</CONTACT>
<CONTACT>
<PDE-Identity>N65553</PDE-Identity>
<FirstName>GhorbelMahmoud</FirstName>
<LastName>Mahmoud Ghorbel</LastName>
<Facebook-ID/>
<EMAIL>
<Type>alcatel-lucent</Type>
<Value>mahmoud.ghbel@alcatel-lucent.com</Value>
</EMAIL>
</CONTACT>
<CONTACT>
<PDE-Identity>N65560</PDE-Identity>
<FirstName>keyankarthik</FirstName>
<LastName>karthik keyan</LastName>
<Facebook-ID/>
<EMAIL>
<Type>yahoo</Type>
<Value>karthye@yahoo.co.in</Value>
</EMAIL>
</CONTACT>
<CONTACT>
<PDE-Identity>N65567</PDE-Identity>
<FirstName>Rangarajkarthik</FirstName>
<LastName>karthik Rangaraj</LastName>
<Facebook-ID/>
<EMAIL>
<Type>gmail</Type>
<Value>kart06@gmail.com</Value>
<Type>yahoo</Type>
<Value>karthikngaraj@yahoo.com</Value>
</EMAIL>
</CONTACT>
<CONTACT>
<PDE-Identity>N65576</PDE-Identity>
<FirstName>ReddyAkky</FirstName>
<LastName>Akky Reddy</LastName>
<Facebook-ID/>
<EMAIL>
<Type>gmail</Type>
<Value>akkiredch@gmail.com</Value>
</EMAIL>
</CONTACT>
<CONTACT>
<PDE-Identity>N65583</PDE-Identity>
<FirstName>SandfordFrankie</FirstName>
<LastName>Frankie Sandford</LastName>
<URL>http://www.facebook.com/FrankieSandfordApprovedPage</URL>
<Facebook-ID/>
<EMAIL/>
</CONTACT>
<CONTACT>
<PDE-Identity>N65590</PDE-Identity>
<FirstName>TheSatsRochelle</FirstName>
<LastName>Rochelle TheSats</LastName>
<URL>http://www.facebook.com/profile.php?id=100002487211054</URL>
<Facebook-ID>100002487211054</Facebook-ID>
<EMAIL/>
</CONTACT>
<CONTACT>
<PDE-Identity>N65597</PDE-Identity>
<FirstName>KumarVeera</FirstName>
<LastName>Vea_Kumar</LastName>
<Facebook-ID/>
<EMAIL>
<Type>yahoo</Type>
<Value>KURg_81@yahoo.com</Value>
</EMAIL>
</CONTACT>
</CONTACTS>

1 Ответ

1 голос
/ 01 июля 2011

Я думаю, что вы смешиваете XUL и формат XML. XUL - это язык пользовательского интерфейса XML , что означает, что он описывает интерфейс Use в формате XML.
Функции getElementsByTagName и getElementById предназначены для доступа к элементам XUL, т.е. к элементам пользовательского интерфейса, через их идентификаторы или имя тега.
Вы не можете / не должны изменять данные XML с помощью этих функций . Для обработки данных XML в javascript вы должны использовать E4X . Вы можете найти хороший учебник здесь . Вы должны найти решение того, что вам нужно внутри.

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

<EMAILS>
  <EMAIL>
    <Type>gmail</Type>
    <Value>kart06@gmail.com</Value>
  </EMAIL>
  <EMAIL>    
    <Type>yahoo</Type>
    <Value>karthikngaraj@yahoo.com</Value>
  </EMAIL>
</EMAILS>
...