使用JavaScript在标记值与输入匹配时返回XML标记属性

使用JavaScript在标记值与输入匹配时返回XML标记属性,javascript,xml,xml-parsing,google-gadget,xmldom,Javascript,Xml,Xml Parsing,Google Gadget,Xmldom,我正在使用如下所示的XML代码。我已经请求并检索了代码。我需要编写一个函数,该函数将: 1) 接收输入的代码 2) 动态返回数据库中与subnational1 code=“US-MI”和标记值“Kent”对应的subnational2代码 我非常感谢你的帮助+1和更多的人谁可以为我提供一个工作功能!提前谢谢 我将使用XPath检索节点 尝试使用document.evaluate()函数: var xpathResult = document.evaluate("location[@subnati

我正在使用如下所示的XML代码。我已经请求并检索了代码。我需要编写一个函数,该函数将: 1) 接收输入的代码 2) 动态返回数据库中与subnational1 code=“US-MI”和标记值“Kent”对应的subnational2代码


我非常感谢你的帮助+1和更多的人谁可以为我提供一个工作功能!提前谢谢

我将使用XPath检索节点

尝试使用document.evaluate()函数:

var xpathResult = document.evaluate("location[@subnational1-code='US-MI' and text() = 'Kent']/@subnational2-code", itemList, null, XPathResult.ANY_TYPE, null);  

不确定这是否完全是您想要的,但这里有一个javascript方法来解析它。希望这对你有用

var output = "";
var subnational1Code="US-MI";
var subnational2Name="Kent";
var itemList = document.getElementsByTagName("result");
for(var i = 0;i<itemList.length; i++){
  var d = getData(itemList.item(i));
  for(var k in d)
    if (d[k].sub1 === subnational1Code && d[k].value === subnational2Name)
      output = d[k].sub2;
}
function getData(n) {
  var objArray = new Array();
  var nodeList = n.childNodes;
  for (var j = 0; j < nodeList.length ; j++) {
  var node = nodeList.item(j);
  var o = new Object();
  o["value"] = node.firstChild.nodeValue;
  o["country"] = node.attributes["country-code"].nodeValue;
  o["sub1"] = node.attributes["subnational1-code"].nodeValue;
  o["sub2"] = node.attributes["subnational2-code"].nodeValue;
  objArray.push(o);
  } return objArray;
}

// console.log(output); //in case you wanted to debug it
var输出=”;
var subnational1Code=“US-MI”;
var subnational2Name=“Kent”;
var itemList=document.getElementsByTagName(“结果”);

对于(var i=0;iIs jQuery是一个选项?不。这是在一个谷歌小工具中,它不会接受或下载jQuery库,不幸的是我正在一个谷歌小工具中开发,它可能不支持XPath。我正在研究谷歌代码的等价物。在这种情况下,纯JavaScript解析将是首选。非常感谢h的答案!我会在有机会的时候查看:)我觉得它看起来不错,但我遇到了麻烦。我理解代码,但它就是不起作用。第7-9行缺少一些括号吗?你在URL上测试过它了吗?你能复制一个JSFIDLE或什么吗?我希望我没有问太多:-@wagtail嗯…似乎我发现了一个潜在的问题。当我把它放在创建HTML文档并运行它时,它会拾取文本节点(使用
childNodes
childrends
之间的区别)。我纠正了这一点。我没有使用Google Gadgets,我关心的一个问题是某些javascript是否不兼容。最后,当您想将其放到生产环境中时,我假设您需要将
document.getElementsByTagName
更改为
response.getElementsByTagName
在前面的示例代码中。@wagtail很高兴听到它!:D如果我能提供更多帮助,请告诉我。:)
 var output = "US-MI-081";
var xpathResult = document.evaluate("location[@subnational1-code='US-MI' and text() = 'Kent']/@subnational2-code", itemList, null, XPathResult.ANY_TYPE, null);  
var output = "";
var subnational1Code="US-MI";
var subnational2Name="Kent";
var itemList = document.getElementsByTagName("result");
for(var i = 0;i<itemList.length; i++){
  var d = getData(itemList.item(i));
  for(var k in d)
    if (d[k].sub1 === subnational1Code && d[k].value === subnational2Name)
      output = d[k].sub2;
}
function getData(n) {
  var objArray = new Array();
  var nodeList = n.childNodes;
  for (var j = 0; j < nodeList.length ; j++) {
  var node = nodeList.item(j);
  var o = new Object();
  o["value"] = node.firstChild.nodeValue;
  o["country"] = node.attributes["country-code"].nodeValue;
  o["sub1"] = node.attributes["subnational1-code"].nodeValue;
  o["sub2"] = node.attributes["subnational2-code"].nodeValue;
  objArray.push(o);
  } return objArray;
}

// console.log(output); //in case you wanted to debug it