在 xml 中搜索属性

Search for attribute in xml

本文关键字:属性 搜索 xml      更新时间:2023-09-26

我尝试了许多不同的方法,但没有运气。我所要做的就是识别当前 URL 的域,并根据域从 XML 文件中提取一个值。

任何帮助将不胜感激。

商人.xml

<?xml version="1.0" encoding="utf-8"?>
<catalog>
  <merchant id="1">
    <domain>http://www.amazon.com</domain>
    <affiliate>1</affiliate>
  </merchant>
</catalog>

弹出窗口.js

function ReadXML() {
    try {
        var xmlPath = "merchants.xml";
        $.ajax({
            type: "GET",
            url: xmlPath,
            dataType: "xml",
            success: parseXML
        });
    } catch (e) {
        alert("Error while reading XML; Description – " + e.description);
    }
}
function parseXML(xml) {
    var $merchant = $(xml).find('domain').filter(function() {
        return $(this).text() == "http://www.amazon.com";
    }).closest('domain');
    var affiliate = $('affiliate', $domain).text();
    if(window.location.hostname.indexOf("http://www.amazon.com") > -1) {
        document.getElementById("demo").innerHTML = affiliate;
    }
}
readXML()

弹出窗口.html

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Test</title>
        <style>
          body {
            font-family: "Segoe UI", "Lucida Grande", Tahoma, sans-serif;
            font-size: 75%;
          }
          #status {
            /* avoid an excessively wide status text */
            white-space: normal;
            text-align: center;
            width: 200px;
            height: 225px;
            overflow: hidden;
            max-width: 400px;
            word-wrap: normal;
          }
        </style>
        <script type="text/javascript" src="popup.js"></script>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
    </head>
    <body>
        <table id="demo"></table>
        <div id="status"></div>
    </body>
</html>

您可以使用 jQuery XML 转换为 JSON 插件将 XML 转换为 JSON。结果,您将获得一个包含所有属性的 Javascript 对象:

{"merchant":{"domain":"http://www.amazon.com","affiliate":"1","id":"1"}}

完整示例:

<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="https://jquery-xml2json-plugin.googlecode.com/svn/trunk/jquery.xml2json.js"></script>
<script type="text/javascript">
    $(function() {
        var 
            xml,
            json;
        xml = 
            '<?xml version="1.0" encoding="utf-8"?>' + 
            '<catalog>' + 
                '<merchant id="1">' + 
                '<domain>http://www.amazon.com</domain>' + 
                '<affiliate>1</affiliate>' + 
                '</merchant>' + 
            '</catalog>';
        json = $.xml2json(xml);
        alert(json.merchant.domain);
    });
</script>
var affiliateData = {};
function loadUrlData(url, data, affiliateData) {
  var urlDomain = url.substring(url.indexOf('//') + 2);
  if (urlDomain.indexOf('/') > -1) {
    urlDomain = urlDomain.substring(0, urlDomain.indexOf('/'));
  }
  if (urlDomain.indexOf('?') > -1) {
    urlDomain = urlDomain.substring(0, urlDomain.indexOf('?'));
  }
  lastIndexOfDot = urlDomain.lastIndexOf('.');
  if (lastIndexOfDot < 0) {
    return;
  }

  do {
    affiliateData[urlDomain] = data;
    urlDomain = urlDomain.slice(urlDomain.indexOf('.') + 1);
  } while (urlDomain.indexOf('.') > -1);
};
function getAffiliateData(url, affiliateData) {
  var urlDomain = url.substring(url.indexOf('//') + 2);
  if (urlDomain.indexOf('/') > -1) {
    urlDomain = urlDomain.substring(0, urlDomain.indexOf('/'));
  }
  if (urlDomain.indexOf('?') > -1) {
    urlDomain = urlDomain.substring(0, urlDomain.indexOf('?'));
  }
  lastIndexOfDot = urlDomain.lastIndexOf('.');
  if (lastIndexOfDot < 0) {
    return 'none';
  }
  do {
    for (domain in affiliateData) {
      if (domain == urlDomain) {
        return affiliateData[domain];
      }
    }
    urlDomain = urlDomain.slice(urlDomain.indexOf('.') + 1);
  } while (urlDomain.indexOf('.') > -1);
  return 'none';
};
var url = 'http://www.amazon.com?asdf=/a/b/c';
var url2 = 'http://www.yahoo.com?asdf=/a/b/c';
loadUrlData('http://www.amazon.com?asdf=/a/b/c', 'data amazon', affiliateData);
loadUrlData('http://www.yahoo.com?asdf=/a/b/c', 'data yahoo', affiliateData);
alert(getAffiliateData(url, affiliateData));
alert(getAffiliateData(url2, affiliateData));