简体   繁体   English

需要帮助使用 java-script 在 html 文件中显示 XML 内容

[英]Need help displaying XML content in html file with java-script

This is my xml code.这是我的 xml 代码。 I want to display the contents in a html page with Javascript.我想用 Javascript 在 html 页面中显示内容。

<businesses>
    <business bfsId="" id="41481">
        <advertHeader>Welding Supplies, Equipment and Service Business</advertHeader>
        <Price>265000</Price>
        <catalogueDescription>Extremely profitable (Sales £500k, GP £182k) business</catalogueDescription>
        <keyfeature1>
        Well established 25 year business with excellent trading record
        </keyfeature1>
        <keyfeature2>
        Consistently high levels of turnover and profitability over last 5 years
        </keyfeature2>
    </business>
    <business bfsId="" id="42701">
        <broker bfsRef="1771" ref="003">Birmingham South, Wolverhampton &amp; West Midlands</broker>
        <tenure>freehold</tenure>
        <advertHeader>Prestigious Serviced Office Business</advertHeader>
        <Price>1200000</Price>
        <reasonForSale>This is a genuine retirement sale.</reasonForSale>
        <turnoverperiod>Annual</turnoverperiod>
        <established>28</established>
        <catalogueDescription>This well-located and long-established serviced office</catalogueDescription>
        <underOffer>No</underOffer>
        <image1>https://www.business-partnership.com/uploads/business/businessimg15977.jpg</image1>
        <keyfeature1>other connections</keyfeature1>
        <keyfeature2> Investment Opportunity</keyfeature2>
        <keyfeature3>Over 6,000 sq.ft.</keyfeature3>
        <keyfeature4>Well-maintained </keyfeature4>
        <keyfeature5>In-house services &amp; IT provided</keyfeature5>
    </business>
</businesses>

This is the html table where the data are being printed这是打印数据的 html 表

<table id="MainTable"><tbody id="BodyRows"></tbody></table>

And I have found the following javascript code to display xml content in html page.我发现以下 javascript 代码可以在 html 页面中显示 xml 内容。 For every a row is being printed for every <business> element.为每个<business>元素打印每一行。 And for the child elements under <business> there is a column.对于<business>下的子元素,有一列。

window.addEventListener("load", function() {
            getRows();
        });

        function getRows() {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("get", "2l.xml", true);
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    showResult(this);
                }
            };
            xmlhttp.send(null);
        }

        function showResult(xmlhttp) {
            var xmlDoc = xmlhttp.responseXML.documentElement;
            removeWhitespace(xmlDoc);
            var outputResult = document.getElementById("BodyRows");
            var rowData = xmlDoc.getElementsByTagName("business");

            addTableRowsFromXmlDoc(rowData,outputResult);
        }

        function addTableRowsFromXmlDoc(xmlNodes,tableNode) {
            var theTable = tableNode.parentNode;
            var newRow, newCell, i;
            console.log ("Number of nodes: " + xmlNodes.length);
            for (i=0; i<xmlNodes.length; i++) {
                newRow = tableNode.insertRow(i);
                newRow.className = (i%2) ? "OddRow" : "EvenRow";
                for (j=0; j<xmlNodes[i].childNodes.length; j++) {
                    newCell = newRow.insertCell(newRow.cells.length);
                        //x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); 
                        // var ah = getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue.getElementsByTagName("advertHeader")[0] 
                        //var advertHeader = xmlNodes[i].childNodes[j].getElementsByTagName();

                    if (xmlNodes[i].childNodes[j].firstChild) {
                        newCell.innerHTML = xmlNodes[i].childNodes[j].firstChild.nodeValue;
                    } else {
                        newCell.innerHTML = "-";
                    }
                    console.log("cell: " + newCell);

                }
                }
                theTable.appendChild(tableNode);
        }

        function removeWhitespace(xml) {
            var loopIndex;
            for (loopIndex = 0; loopIndex < xml.childNodes.length; loopIndex++)
            {
                var currentNode = xml.childNodes[loopIndex];
                if (currentNode.nodeType == 1)
                {
                    removeWhitespace(currentNode);
                }
                if (!(/\S/.test(currentNode.nodeValue)) && (currentNode.nodeType == 3))
                {
                    xml.removeChild(xml.childNodes[loopIndex--]);
                }
            }
        }

This javascript code works .But as you can see from the xml code the number of child elements under each <business> elements are different .这个 javascript 代码有效。但是正如您从 xml 代码中看到的,每个<business>元素下的子元素数量是不同的。 This is the original xml file https://alpha.business-sale.com/bfs.xml .这是原始 xml 文件https://alpha.business-sale.com/bfs.xml Some <business> node has more child nodes then the others.一些<business>节点比其他节点有更多的子节点。 So the result I am getting is like this所以我得到的结果是这样的

在此处输入图片说明

Where the first row has 5 columns and the 2nd row has more than 10 column.其中第一行有 5 列,第二行有超过 10 列。

I want to我想要

  • display only specific child nodes such as <advertHeader> ;仅显示特定的子节点,例如<advertHeader> <Price> and <catalogueDescription> so that every row displays the equal number of columns <Price><catalogueDescription>使每一行显示相同的列数
  • if the value of <Price> node is < 10000 I dont want to print the row for如果<Price>节点的值 < 10000 我不想打印行

How to do that with this code如何使用此代码执行此操作

This code worked for me.这段代码对我有用。 Here is the full code这是完整的代码

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

<meta charset="utf-8">
<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1">

<title>XML display</title>

<link rel="stylesheet" href="screen.css" media="screen">

<style media="screen">
body {
    background-color: #f9f9f9;
    font: normal 1em / 1.5em BlinkMacSystemFont, -apple-system, 'Segoe UI', roboto, helvetica, arial, sans-serif;
 }
h1,noscript {
    text-align: center;
 }

#mainTable {
    max-width: 62.5em;
    margin: auto;
    border-collapse: collapse;
    background-color: #fff;
 }

#mainTable th, #mainTable td {
    padding: 0.5em;
    border: 1px solid #999;
}

</style>

</head>
<body>

 <h1> XML Display</h1>

 <noscript>
  <p>JavaScript is required for this project</p>
 </noscript>

<script>
(function( d ) {
   'use strict';

  var xmlhttp = new XMLHttpRequest();
      xmlhttp.open('get', 'https://alpha.business-sale.com/bfs.xml', true );
      xmlhttp.onreadystatechange = function() {
         if (  this.readyState === 4 && this.status === 200) {
               showResult( this );
           }
          };
      xmlhttp.send( null );

function showResult( xmlhttp ) {
   var xmlDoc = xmlhttp.responseXML.documentElement,
           pr = xmlDoc.getElementsByTagName( 'Price' ),
           ah = xmlDoc.getElementsByTagName( 'advertHeader' ),
           cd = xmlDoc.getElementsByTagName( 'catalogueDescription' ),
           minimumValue = 10000,
            c, tl, thd, th, tb, tr, td;

   tl = d.createElement( 'table' );
   tl.setAttribute( 'id', 'mainTable' );
   thd = d.createElement( 'thead' );
   tr = d.createElement( 'tr' );

   th = d.createElement( 'th' );
   th.appendChild( d.createTextNode( 'Advert Header' ));
   tr.appendChild( th );
   th = d.createElement( 'th' );
   th.appendChild( d.createTextNode( 'Price' ));
   tr.appendChild( th );
   th = d.createElement( 'th' );
   th.appendChild( d.createTextNode( 'Catalogue Description' ));
   tr.appendChild( th );
   thd.appendChild( tr );
   tl.appendChild( thd );

   tb = d.createElement( 'tbody' );
   tl.appendChild( tb );
   d.body.appendChild( tl );

   for ( var c = 0; c < pr.length; c ++ ) {
      if ( Number( pr[c].textContent ) > minimumValue ) {
         tr = d.createElement( 'tr' );
         td = d.createElement( 'td' );
         td.appendChild( d.createTextNode( ah[c].textContent ));
         tr.appendChild( td );
         td = d.createElement( 'td' );
         td.appendChild( d.createTextNode( pr[c].textContent ));
         tr.appendChild( td );
         td = d.createElement( 'td' );
         td.appendChild( d.createTextNode( cd[c].textContent ));
         tr.appendChild( td );
         tb.appendChild( tr );
        }
    }

   td = d.getElementsByTagName( 'td' );
      for ( c = 0; c < td.length; c ++ ) {
         td[c].textContent = td[c].textContent.replace( /\amp;/g, '' );
        }
 }

}( document ));
</script>

</body>
</html>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM