首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从XUL中的JavaScript文件解析中获取父节点的子子值

如何从XUL中的JavaScript文件解析中获取父节点的子子值
EN

Stack Overflow用户
提问于 2011-06-29 17:45:46
回答 1查看 1.2K关注 0票数 0

如何根据电子邮件类型将电子邮件值解析到文本框中。我需要一些帮助来解析我的文本框中的电子邮件值。

代码语言:javascript
复制
<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电子邮件地址。我真的很困惑..。

代码语言:javascript
复制
<row>
    <label value="Gmail"/>
    <textbox id="gmail" value=""/>
</row>
<row>
    <label value="Yahoo"/>
    <textbox id="yahoo" value=""/>
</row> 

这就是我到目前为止所知道的:

代码语言:javascript
复制
var str=x[i].getElementsByTagName("Value")[0].childNodes[0].nodeValue;
document.getElementById("gmail").value=str;

这不管用。

XUL代码:

代码语言:javascript
复制
<?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文件:

代码语言:javascript
复制
   <?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-01 22:38:21

我认为您混淆了XUL和XML格式。XUL是一种XML Language,这意味着它以格式描述用户界面。

getElementsByTagName和getElementById函数旨在通过其ids或标记名访问XUL元素,即UI元素。

您不能/不应该使用这些函数修改XML数据。要在javascript中处理XML数据,您应该使用E4X。你可以找到一个很好的教程here。你应该找到你内心所需的解决方案。

顺便说一句,由于XML数据中两个兄弟节点的顺序并不重要,我建议您为每个电子邮件地址创建一个包含Email值和类型的parents节点:

代码语言:javascript
复制
<EMAILS>
  <EMAIL>
    <Type>gmail</Type>
    <Value>kart06@gmail.com</Value>
  </EMAIL>
  <EMAIL>    
    <Type>yahoo</Type>
    <Value>karthikngaraj@yahoo.com</Value>
  </EMAIL>
</EMAILS>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6518659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档