Javascript通过标记搜索XML并获取同级节点
我不熟悉javascript和xml,在搜索xml文件中的值和显示相关节点值时遇到问题。我有记事本和IE 8要用,我一直在努力学习。我能够拼凑出一些有效的东西,但却无法让代码发挥作用;但是,它只是返回了我使用getElementsByTagName搜索的标记 我正在处理由其他人生成的xml,我无法控制xml,因此对于每个xml,我甚至不知道如何称呼它们,我想称它们为记录集、节点族?它可能没有所有的字段。 示例:书籍->标题、作者、年份和价格 而另一个是 示例:书籍->标题、作者、年份 所以我想按标题搜索并返回相关字段。我想看看是否可以使用我现有的工具,没有jsquery、Ajax、XPath。。。。 我检查了w3学校,它有我认为我需要的东西,但无法让搜索功能(从堆栈溢出链接)工作 尝试添加我正在使用的最新代码;但是,我的大脑已经死了,似乎无法很好地显示出来 XML=“test.XML”Javascript通过标记搜索XML并获取同级节点,javascript,html,xml,Javascript,Html,Xml,我不熟悉javascript和xml,在搜索xml文件中的值和显示相关节点值时遇到问题。我有记事本和IE 8要用,我一直在努力学习。我能够拼凑出一些有效的东西,但却无法让代码发挥作用;但是,它只是返回了我使用getElementsByTagName搜索的标记 我正在处理由其他人生成的xml,我无法控制xml,因此对于每个xml,我甚至不知道如何称呼它们,我想称它们为记录集、节点族?它可能没有所有的字段。 示例:书籍->标题、作者、年份和价格 而另一个是 示例:书籍->标题、作者、年份 所以我想按
142450
B
G
可用
2014-11-14T00:00:00
网状物
144230
F
T
可用
2014-11-14T00:00:00
内部
144240
F
P
NA
HTML=“new_test.htm”
在Microsoft浏览器中读取XML
var-xmlDoc;
函数loadxml()
{
xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async=false;
xmlDoc.onreadystatechange=readXML;
load(“test.xml”);
}
函数readXML()
{
if(xmlDoc.readyState==4)
{
var-foundElements=[];
arrayOfElements=xmlDoc.getElementsByTagName(“XML_x0020_导出”);
对于(i=0;i好的,我在这方面已经解决了几个问题。首先,您永远不会真正尝试在本地加载xml文件……您将从web服务或类似的方式获取xml文件,然后您将对其进行操作。这在堆栈溢出方面已经得到了多次回答,我已将其从您的复杂情况中删除。因此,我已将您的xml文件转换为字符串,并使用新行将其连接起来
第二,我想我应该浏览代码行,边走边解释
var foundElements = [];
arrayOfElements = xmlDoc.getElementsByTagName("XML_x0020_Export");
这并没有改变,我们实例化了数组并用xml元素加载它
for (i=0;i<arrayOfElements.length;i++)
这是我们为每个元素实例化输出字符串
for (x=0; x<arrayOfElements[i].childNodes.length; x++) {
我们只想在节点类型为1的节点上操作。这些节点是我们的属性节点,包含我们真正关心的数据
output += arrayOfElements[i].childNodes[x].nodeName + ": " + arrayOfElements[i].childNodes[x].firstChild.nodeValue + "\n";
然后,我们将字符串与子节点名称(title)和值(value)连接起来
document.write(输出);
文件。写(“
”);
一旦我们到达元素中的最后一个节点,我们希望写入html,并循环到下一个元素
这一切对我来说都很有用,它应该可以帮助您了解如何导航xml文档。您似乎没有使用的一件事是Javascript的内置调试。如果没有它,我不确定Javascript编程会有多复杂,这在我编写此回复时至关重要
最终代码:
<!DOCTYPE html>
<head>
<title>Read XML in Microsoft Browsers</title>
<script type="text/javascript">
var xmlDoc;
function loadxml()
{
parser=new DOMParser();
xmlDoc=parser.parseFromString( "<dataroot> \n" +
"<XML_x0020_Export> \n" +
"<ID>142450</ID> \n" +
"<LI>B</LI> \n" +
"<FI>G</FI> \n" +
"<Status>Available</Status> \n" +
"<Status-Date>2014-11-14T00:00:00</Status-Date> \n" +
"<Status-Loc>Web</Status-Loc> \n" +
"</XML_x0020_Export> \n" +
"<XML_x0020_Export> \n" +
"<ID>144230</ID> \n" +
"<LI>F</LI> \n" +
"<FI>T</FI> \n" +
"<Status>Available</Status> \n" +
"<Status-Date>2014-11-14T00:00:00</Status-Date> \n" +
"<Status-Loc>In House</Status-Loc> \n" +
"</XML_x0020_Export> \n" +
"<XML_x0020_Export> \n" +
"<ID>144240</ID> \n" +
"<LI>F</LI> \n" +
"<FI>P</FI> \n" +
"<Status>NA</Status> \n" +
"</XML_x0020_Export> \n" +
"</dataroot>",
"text/xml");
}
function readXML()
{
var foundElements = [];
arrayOfElements = xmlDoc.getElementsByTagName("XML_x0020_Export");
for (i=0;i<arrayOfElements.length;i++)
{
var output = "";
for (x=0; x<arrayOfElements[i].childNodes.length; x++) {
if (arrayOfElements[i].childNodes[x].nodeType == 1) {
output += arrayOfElements[i].childNodes[x].nodeName + ": " + arrayOfElements[i].childNodes[x].firstChild.nodeValue + "\n";
}
}
document.write(output);
document.write("<br>");
}
}
</script>
</head>
<body onload="loadxml(); readXML()">
</body>
</html>
在Microsoft浏览器中读取XML
var-xmlDoc;
函数loadxml()
{
parser=新的DOMParser();
xmlDoc=parser.parseFromString(“\n”+
“\n”+
“142450\n”+
“B \n”+
“G\n”+
“可用\n”+
“2014-11-14T00:00:00\n”+
“Web\n”+
“\n”+
“\n”+
“144230\n”+
“F \n”+
“T\n”+
“可用\n”+
“2014-11-14T00:00:00\n”+
“内部\n”+
“\n”+
“\n”+
“144240\n”+
“F \n”+
“P\n”+
“不适用\n”+
“\n”+
"",
“文本/xml”);
}
函数readXML()
{
var-foundElements=[];
arrayOfElements=xmlDoc.getElementsByTagName(“XML_x0020_导出”);
对于(i=0;我感谢您的回复。我似乎无法让它工作。我已经用我目前正在处理的代码和xml的一部分以及我想做的事情更新了我的问题,希望这能让它更清楚。我已经根据您更新的问题/代码进行了更新…请让我知道它是否工作!
for (x=0; x<arrayOfElements[i].childNodes.length; x++) {
if (arrayOfElements[i].childNodes[x].nodeType == 1) {
output += arrayOfElements[i].childNodes[x].nodeName + ": " + arrayOfElements[i].childNodes[x].firstChild.nodeValue + "\n";
document.write(output);
document.write("<br>");
<!DOCTYPE html>
<head>
<title>Read XML in Microsoft Browsers</title>
<script type="text/javascript">
var xmlDoc;
function loadxml()
{
parser=new DOMParser();
xmlDoc=parser.parseFromString( "<dataroot> \n" +
"<XML_x0020_Export> \n" +
"<ID>142450</ID> \n" +
"<LI>B</LI> \n" +
"<FI>G</FI> \n" +
"<Status>Available</Status> \n" +
"<Status-Date>2014-11-14T00:00:00</Status-Date> \n" +
"<Status-Loc>Web</Status-Loc> \n" +
"</XML_x0020_Export> \n" +
"<XML_x0020_Export> \n" +
"<ID>144230</ID> \n" +
"<LI>F</LI> \n" +
"<FI>T</FI> \n" +
"<Status>Available</Status> \n" +
"<Status-Date>2014-11-14T00:00:00</Status-Date> \n" +
"<Status-Loc>In House</Status-Loc> \n" +
"</XML_x0020_Export> \n" +
"<XML_x0020_Export> \n" +
"<ID>144240</ID> \n" +
"<LI>F</LI> \n" +
"<FI>P</FI> \n" +
"<Status>NA</Status> \n" +
"</XML_x0020_Export> \n" +
"</dataroot>",
"text/xml");
}
function readXML()
{
var foundElements = [];
arrayOfElements = xmlDoc.getElementsByTagName("XML_x0020_Export");
for (i=0;i<arrayOfElements.length;i++)
{
var output = "";
for (x=0; x<arrayOfElements[i].childNodes.length; x++) {
if (arrayOfElements[i].childNodes[x].nodeType == 1) {
output += arrayOfElements[i].childNodes[x].nodeName + ": " + arrayOfElements[i].childNodes[x].firstChild.nodeValue + "\n";
}
}
document.write(output);
document.write("<br>");
}
}
</script>
</head>
<body onload="loadxml(); readXML()">
</body>
</html>