【问题标题】:XML parsing with jQuery and populate text fields使用 jQuery 解析 XML 并填充文本字段
【发布时间】:2015-06-02 20:57:14
【问题描述】:

我有一个包含我所有数据的 XML 文件,我需要从这个 XML 文件数据中填充文本字段。还有一个下拉菜单,其中包含可以选择的 XML 中每个主要部分的名称。例如,如果有人在下拉列表中选择“M-A L”,它应该使用 XML 部分中的数据填充 HTML 文件中的文本字段。并且每个文本字段都应该与 XML 中的数据相关联。

这是我的 html 代码:

<select id="Bname">
    <option value="">Please Select</option>
    <option value="M-A">M-A L</option>
    <option value="AP">Alain P</option>
</select>

<input type="text" id="name">
<input type="text" id="title">
<input type="text" id="line1">

这是我的 jQuery 代码:

<script type="text/javascript">  
$(document).ready(function()
{
  $.ajax({
    type: "GET",
    url: "signatures.xml",
    dataType: "xml",
    success: parseXml
  });  });


function parseXml(xml)
{
  $(xml).find("Signature").each(function()
  {
    $("#name").val($(this).find("Nom").text);
    $("#title").val($(this).find("PG-Ligne1").text);
    $("#line1").val($(this).find("PG-Ligne2").text);
  });

}

</script>

还有我的 XML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<SignaturesNovatech>
  <Signature name="M-A L">
    <Nom>asd</Nom>
    <PG-Ligne1>Representative</PG-Ligne1>
    <PG-Ligne2>Cleaner</PG-Ligne2>
    <PG-Ligne3>3223 Metro street</PG-Ligne3>
    <PG-Ligne4>1-438-234-4453</PG-Ligne4>
    <PD-Ligne1>www.website.com</PD-Ligne1>
    <PD-Ligne2>mal@website.com</PD-Ligne2>
    <PD-Ligne3>City here</PD-Ligne3>
    <PD-Ligne4>Postal code</PD-Ligne4>
    <PD-Ligne5>Services available</PD-Ligne5>
    <PD-Ligne6>Graphic</PD-Ligne6>
  </Signature>
<Signature name="Alain P">
    <Nom>asd</Nom>
    <PG-Ligne1>Representative</PG-Ligne1>
    <PG-Ligne2>Cleaner</PG-Ligne2>
    <PG-Ligne3>3223 Metro street</PG-Ligne3>
    <PG-Ligne4>1-438-234-4453</PG-Ligne4>
    <PD-Ligne1>www.website.com</PD-Ligne1>
    <PD-Ligne2>mal@website.com</PD-Ligne2>
    <PD-Ligne3>City here</PD-Ligne3>
    <PD-Ligne4>Postal code</PD-Ligne4>
    <PD-Ligne5>Services available</PD-Ligne5>
    <PD-Ligne6>None</PD-Ligne6>
  </Signature>
</SignaturesNovatech>

我知道“onchange”下拉项的内容缺少部分。下拉菜单中的选项应该是文本......它应该扫描 XML 文件以检测那里是否有新条目。

我是 XML 和 jQuery 解析的新手。非常感谢

【问题讨论】:

  • $(this).find("PG-Ligne1").text; -> 你错过了() ==> $(this).find("PG-Ligne1").text();
  • 非常感谢 LShetty!现在数据在字段中正确显示。现在我唯一需要弄清楚的是如何使下拉菜单选项采用 XML 的每个 部分的名称属性来创建一个选项。因此,在我现在的代码中,下拉菜单中的 2 个选项将是“M-A L”和“Alain P”。此外,当我选择其中一个(例如 Alain P)时,我需要它去解析“Alain P”签名部分并根据每个字段的 ID 返回文本字段中的值......这应该发生“onchange”。再次非常感谢

标签: javascript jquery html xml


【解决方案1】:

所以,这是您所追求的快速而肮脏的版本。看看这是不是你想要的。

var xml = '<?xml version="1.0" encoding="utf-8" ?><SignaturesNovatech><Signature name="M-A L"><Nom>asd</Nom><PG-Ligne1>Representative</PG-Ligne1><PG-Ligne2>Cleaner</PG-Ligne2><PG-Ligne3>3223 Metro street</PG-Ligne3><PG-Ligne4>1-438-234-4453</PG-Ligne4><PD-Ligne1>www.website.com</PD-Ligne1><PD-Ligne2>mal@website.com</PD-Ligne2><PD-Ligne3>City here</PD-Ligne3><PD-Ligne4>Postal code</PD-Ligne4><PD-Ligne5>Services available</PD-Ligne5><PD-Ligne6>Graphic</PD-Ligne6></Signature><Signature name="Alain P"><Nom>asd-Alain</Nom><PG-Ligne1>Representative-2</PG-Ligne1><PG-Ligne2>Cleaner-2</PG-Ligne2><PG-Ligne3>3223 Metro street</PG-Ligne3><PG-Ligne4>1-438-234-4453</PG-Ligne4><PD-Ligne1>www.website.com</PD-Ligne1><PD-Ligne2>mal@website.com</PD-Ligne2><PD-Ligne3>City here</PD-Ligne3><PD-Ligne4>Postal code</PD-Ligne4><PD-Ligne5>Services available</PD-Ligne5><PD-Ligne6>None</PD-Ligne6></Signature></SignaturesNovatech>';

$("#Bname").on("change", parseXml);

function parseXml() {
  var filter = $(this).find(":selected").text();
  var $node = $(xml).find("Signature[name='" + filter + "']");
  $("#name").val($node.find("Nom").text());
  $("#title").val($node.find("PG-Ligne1").text());
  $("#line1").val($node.find("PG-Ligne2").text());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="Bname">
    <option value="">Please Select</option>
    <option value="M-A">M-A L</option>
    <option value="AP">Alain P</option>
</select>

<br/><br/>
<input type="text" id="name"><br/>
<input type="text" id="title"><br/>
<input type="text" id="line1">

因此,您的代码可能会在必要的更改后look like this。希望对您有所帮助。

【讨论】:

  • 非常感谢!完全有道理。奇怪的是,当我更改代码时,它拒绝解析 XML 文件。当我在下拉菜单中选择另一个选项时,什么都不会发生“onchange”。我试图复制并粘贴您在 jsfiddle 中输入的代码,但仍然无法正常工作。代码中的一切似乎都很好......我不确定我明白了,请在这里看看:jsfiddle.net/67ut4087你有什么问题吗?因为可悲的是我没有。非常感谢 LShetty。
  • 您不需要$(document).ready(function(),因为$(function() { 是相同的缩写。因此,我已将其从 your fiddle 中删除。请记住,由于CORS,这在小提琴中不起作用。
  • 太棒了。非常感谢 LShetty,你真的很有帮助! (我可以投票,因为我没有足够的声望点,但如果可以,我会按此按钮 50 次!)
  • 别担心!快乐编码:)
猜你喜欢
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2012-04-12
  • 2011-02-17
  • 1970-01-01
  • 2016-07-22
相关资源
最近更新 更多