2013-10-01 123 views
0

我有一个xml字符串,我需要从仅使用JavaScript中提取值。这里的XML字符串的例子:使用JavaScript查找具有给定属性值的xml元素的值只有

<RequestVars> 
    <BuyerCookie>O7CPHFP7AOY</BuyerCookie> 
    <Extrinsic name="CostCenter">670</Extrinsic> 
    <Extrinsic name="UniqueName">catalog_tester</Extrinsic> 
    <Extrinsic name="UserEmail">[email protected]</Extrinsic> 
</RequestVars> 

,我需要从中获得的电子邮件地址(即[email protected])。我有办法拉值对于给定的独特元素,如使用此功能让O7CPHFP7AOY为BuyerCookie:

function elementValue(xml, elem) { 
    var begidx; 
    var endidx; 
    var retStr; 

    begidx = xml.indexOf(elem); 
    if (begidx > 0) { 
     endidx = xml.indexOf('</', begidx); 
     if (endidx > 0) 
      retStr = xml.slice(begidx + elem.length, 
endidx); 
     return retStr; 
    } 
    return null; 
} 

但现在,我需要一种方法来查找值的“外在”元素与属性“name”的值“UserEmail”。我已经看到了几种在JQuery中完成此操作的方法,但在JavaScript中没有。不幸的是,为了我的目的,我只能使用JavaScript。有任何想法吗?

+0

nope,这似乎没有帮助 – Rob

+0

不要将XML解析为字符串。永远。 – 2013-10-02 06:08:12

回答

0

我想出了一个解决方案。这有点乱,但它确实很棘手。我提供了xml的字符串表示形式,我正在查找的元素标记的名称,属性的名称以及我正在寻找元素值的属性值。

function elementValueByAttribute(xml, elem, attrName, attrValue) { 
    var startingAt = 1; 
    var begidx; 
    var mid1idx; 
    var mid2idx; 
    var endidx; 
    var aName; 
    var retStr; 
    var keepGoingFlag = 1; 

    var count = 0; 
    while (keepGoingFlag > 0) { 
     count++; 
     begidx = xml.indexOf(elem, startingAt); 
     if (begidx > 0) { 
      mid1idx = xml.indexOf(attrName, begidx); 
      if (mid1idx > 0) { 
       mid2idx = xml.indexOf(">", mid1idx); 
       if (mid2idx > 0) { 
        aName = xml.slice(mid1idx + attrName.length + 2, mid2idx - 1); 
        if (aName == attrValue) { 
         endidx = xml.indexOf('</', begidx); 
         if (endidx > 0) 
         { 
          retStr = xml.slice(mid2idx + 1, endidx); 
         } 
         return retStr; 
        } 
       } 
      } 
     } 
     if (startingAt == mid2idx) { 
      keepGoingFlag = 0; 
     } else { 
      startingAt = mid2idx; 
     } 
    } 
    return null; 
} 
相关问题