我无法让我的网页从同一文件夹内的 xml 文件中提取数据

Posted

技术标签:

【中文标题】我无法让我的网页从同一文件夹内的 xml 文件中提取数据【英文标题】:I cant get my webpage to pull data from an xml file inside the same folder 【发布时间】:2021-12-28 04:49:43 【问题描述】:

我不精通 javascript 和 xml,但我正在尝试创建一个网页,我可以在其中通过 ID 代码过滤产品来搜索 xml 文件上的产品。我已经尝试了很多东西,但我没有收到错误,当我点击搜索时没有任何反应。任何关于我哪里出错的帮助将不胜感激,因为老实说我几乎不知道我在做什么。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vendor</title>
</head>

<body>
    <input type="number" id="Code">
    <button type="button" name="button" onclick="loadData()">Get Product</button>
    <div id="results">

    </div>


    <script type="text/javascript">
        async function loadData()
            var data = await fetch("product.xml")
            var parsedData = await data.text()
            
            var parser = new DOMParser();
            var ProductDoc = parser.parseFromString(parsedData,"text/xml");
            var results = ""
            var CodeInput = parseInt(document.getElementById("Code").value)
            var product = ProductDoc.getElementsByTagName("product")
            
            for(var i = 0; i < product.length; i++)
                var Category = Category[i].getElementsByTagName("Category")[0].childNodes[0].nodeValue
                var Code = Code[i].getElementsByTagName("Code")[0].childNodes[0].nodeValue
                var Name = Name[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue
                var Description = Description[i].getElementsByTagName("Description")[0].childNodes[0].nodeValue
                var Quantity = Quantity[i].getElementsByTagName("Quantity")[0].childNodes[0].nodeValue
                var UnitPrice = UnitPrice[i].getElementsByTagName("Category")[0].childNodes[0].nodeValue

                if(isNaN(CodeInput) || CodeInput == parseInt(Code)) 
                    results += "<div>"
                    + "Category: " + Category
                    + ", Code: " + Code
                    + ", Name: " + Name
                    + ", Description: " + Description
                    + ", Quantity: " + Quantity
                    + ", UnitPrice: " + UnitPrice
                    + "</div><br/>"

                
            
            document.getElementById("results").innerHTML = results
        
    </script>
</body>

</html> 
<?xml version="1.0" encoding="UTF-8"?>
<main xmlns:product="index.html">
    <product>
        <product:Category>example</product:Category>
        <product:Code>111-11</product:Code>
        <product:Name>example</product:Name>
        <product:Description>example</product:Description>
        <product:Quantity>example</product:Quantity>
        <product:UnitPrice>example</product:UnitPrice>
    </product>
    <product>
        <product:Category>example</product:Category>
        <product:Code>122-22</product:Code>
        <product:Name>example</product:Name>
        <product:Description>example</product:Description>
        <product:Quantity>example</product:Quantity>
        <product:UnitPrice>example</product:UnitPrice>
    </product>
</main> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="index.html" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Category" type="xs:string" />
    <xs:element name="Code" type="xs:string" />
    <xs:element name="Name" type="xs:string" />
    <xs:element name="Description" type="xs:string" />
    <xs:element name="Quantity" type="xs:string" />
    <xs:element name="UnitPrice" type="xs:string" />
</xs:schema> 

【问题讨论】:

【参考方案1】:

由于您正在处理包含名称空间的 xml 文档,因此使用带有名称空间解析器的 xml 解析器来解析它会更安全。以下内容应该让您足够接近您正在寻找的内容:

let parser = new DOMParser(),
  ProductDoc = parser.parseFromString(parsedData, "application/xml"),
  evaluator = new XPathEvaluator(),
  resolver = evaluator.createNSResolver(ProductDoc),
  results = "",
  products = ProductDoc.evaluate('//product', ProductDoc, resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

for (let i = 0; i < products.snapshotLength; i++) 
  let tags = ProductDoc.evaluate('.//product:*', products.snapshotItem(i), resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
  new_div = "<div>"
  for (let i = 0; i < tags.snapshotLength; i++) 
    new_div += `$tags.snapshotItem(i).localName: $tags.snapshotItem(i).textContent  <br/>`        
        
  results += `$new_div</div><br/>`

document.getElementById("results").innerHTML = results

【讨论】:

以上是关于我无法让我的网页从同一文件夹内的 xml 文件中提取数据的主要内容,如果未能解决你的问题,请参考以下文章

无法从同一文件调用 JavaScript 函数

如何从我自己网络中的公共 IP 访问我的网页

问题:手机访问不了同一个局域网内的电脑上的网站 (已解决)

apache 别人无法访问

Django - 将变量传递给同一脚本标签内的 javascript 文件

提高 LWP::Simple perl 性能