javascript - 尝试用预定义的 xml 文件填写表单(无法更改 xml 文件)

标签 javascript html xml

发生的事情是用它在 xml 文件中遇到的第一个“值”填充所有字段。在这种情况下,用日期填充所有字段。

用户使用html按钮插入xml文件

填写表格的功能,我知道循环总是获取它遇到的第一个“值”,但我该如何修复它,而不更改 xml 文件。我试过了,但没有用。

function populateData(form, xmlDoc){ 
"use strict";
var root = xmlDoc.documentElement;

for (var i = 0; i < form.elements.length; i++) {
  var input = form.elements[i];
      if(input.name){ 
      var xmlElement = root.querySelector(input.name);     

    if(xmlElement[i].textContent !== xmlElement[i-1].textContent){
        input.value = xmlElement.textContent;
    }
      }
  }

}

部分XML文件(我想用“值”之间的信息填写表格)

<?xml version="1.0" encoding="UTF-8"?>
<AssetInfo>
<customMetaData>
  <key>Data</key>
  <value>2018-05-23</value>
</customMetaData>
<customMetaData>
  <key>Hora</key>
  <value>11:00</value>
</customMetaData>
<customMetaData>
  <key>Sala</key>
  <value>1</value>
</customMetaData>
<customMetaData>
  <key>Edifício</key>
  <value>casa</value>
</customMetaData>

部分html表单

    <input class="a" type="date" name="value" id="Data" placeholder="Data" />
    <input class="a" type="time" name="value" id="Hora" placeholder="Hora" />
    <input class="a" type="text" name="value" id="Sala" placeholder="Sala" />
    <input class="a" type="text" name="value" id="Edifício" placeholder="Edifício" />
    <input class="a" type="text" name="value" id="Cidade" placeholder="Cidade" />
    <input class="a" type="text" name="value" id="País" placeholder="País" />

最佳答案

将 xml 解析为映射,然后使用该映射查找与输入名称匹配的键的值

// get an xmlDoc to work with for this snippet
var xmlString = `<AssetInfo>
<customMetaData>
  <key>Data</key>
  <value>2018-05-23</value>
</customMetaData>
<customMetaData>
  <key>Hora</key>
  <value>11:00</value>
</customMetaData>
<customMetaData>
  <key>Sala</key>
  <value>1</value>
</customMetaData>
<customMetaData>
  <key>Edifício</key>
  <value>casa</value>
</customMetaData></AssetInfo>`;
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, 'text/xml');

function populateData(form, xmlDoc){ 
"use strict";
var root = xmlDoc.documentElement;
// get all the customMetaData nodes
var metadataNodes = root.querySelectorAll('customMetaData');
// create an object to store the key/values
var map = {};
// iterate over the nodes and get the key and value to add to the map
  metadataNodes.forEach(function(metadata) {
    var key = metadata.querySelector('key').textContent;
    var value = metadata.querySelector('value').textContent;
    map[key] = value;
  });
  // interate over your form and find the value in the map for that input's name
  for (var i = 0; i < form.elements.length; i++) {
    var input = form.elements[i];
    if(input.name){ 
        input.value = map[input.name] || '';     
    }
    
  }
}

populateData(document.getElementById('myForm'), xmlDoc);
<form id="myForm">
  <input name="Data" /><br />
    <input name="Hora" /><br />
      <input name="Sala" /><br />
        <input name="Edifício" /><br />
</form>

关于javascript - 尝试用预定义的 xml 文件填写表单(无法更改 xml 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50139350/

相关文章:

javascript - 如何加载外部 html 文件?

javascript - 实现任意对象的通用、轻量级且不显眼的标记?

javascript - 在某些浏览器中发出范围请求

html - 图像叠加上不需要的填充底部?

sql - 从XML文件插入

php - 限制使用 htaccess 的访问,但允许来自网页的访问

html - 页面底部的页脚

javascript - 在 JavaScript 中每 x 秒更改一次文档标题

android - 错误 :error: 'drawable/delete.png' is incompatible with attribute android:background (attr) reference|color

php - 'simplexml' php 到 mysql 数据库循环只返回第一个元素