所以我被一个特定的问题难住了。
我有一个包含键值对的 XML 文件。
我的基本目标是仅输入一个键,然后使用警报框显示相应的值。
我的XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<name key="amit"><person><b1>Amit</b1></person> </name>
<name key="Peter">Morris </name>
</properties>
我的脚本文件如下:
var xmlDoc;
function getValue(key)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.load("properties.xml");
if(xmlDoc.readyState == 4)
{
for(var i=0;i<xmlDoc.documentElement.childNodes.length;i++)
{
if(xmlDoc.documentElement.childNodes[i].attributes.getNamedItem("key").nodeValue==key)
{
alert(xmlDoc.documentElement.childNodes[i].nodeValue);
return xmlDoc.documentElement.childNodes[i].text;
}
}
}
}
我的html文件如下:
<html>
<head>
<script src="script.js"></script>
</head>
<body>
<script>
var value=getValue("amit");
alert(value);
</script>
</body>
</html>
当我运行代码时,如果我传递的值是“Peter”,那么我的警报框会显示“Morris”。这是我所预料的。
但是当我传递值“amit”时,警报框仅显示“Amit”。它没有显示给我
<person><b1>Amit</b1></person>
我需要打印完整的值。
有人可以让我知道我错过了什么或者我该如何去做吗?
最佳答案
由于您使用的是 ActiveXObject
,因此您可以使用 .xml
属性来获取元素的标记:
function getValue(key)
{
var xmlDoc;
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.load("properties.xml");
if(xmlDoc.readyState == 4)
{
return xmlDoc.selectSingleNode("//name[@key='" + key + "']").xml;
}
return "";
}
另外,我建议您查看xpath并使用 selectSingleNode()
(或 selectNodes()
)轻松获取 XML 的特定部分,如上所示。
作为引用,xpath 的简单介绍:w3school
关于javascript - 如何使用 Javascript 从 XML 键/值的 .text 获取完整值(包括任何附加标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30524586/