JavaScript를 사용하여 XML 데이터에 액세스

黄舟
풀어 주다: 2017-03-03 17:11:58
원래의
1533명이 탐색했습니다.

웹 브라우저 소프트웨어 중 Internet Explorer(IE)가 이제 표준 소프트웨어가 되었습니다. 보시다시피, 다른 버전의 Windows 운영 체제(및 기타 여러 운영 체제)를 실행하는 거의 모든 컴퓨터는 IE를 사용합니다. Microsoft는 ActiveX 컨트롤을 통해 성숙한 XML 처리 기술을 구현하는 데 IE의 기능을 포함시켰습니다.

이 기사에서는 IE의 ActiveX 기능을 사용하여 XML 문서에 액세스하고 구문 분석하여 웹 사용자가 이를 조작할 수 있도록 하는 방법을 설명합니다.

인터넷 서핑
표 A와 같이 표준 순차 문서로 시작합니다. 이 문서에는 웹서퍼가 검색할 수 있는 간단한 순차 데이터가 포함되어 있습니다. 이 데이터를 표시할 뿐만 아니라 인터넷을 서핑하는 사람이라면 누구나 XML 문서를 탐색하는 데 사용할 수 있는 간단한 사용자 인터페이스도 제공합니다.

테이블 A: order.xml

<?xml version="1.0" ?>
<Order>
  <Account>9900234</Account>
  <Item id="1">
    <SKU>1234</SKU>
    <PRicePer>5.95</PricePer>
    <Quantity>100</Quantity>
    <Subtotal>595.00</Subtotal>
    <Description>Super Widget Clamp</Description>
  </Item>
  <Item id="2">
    <SKU>6234</SKU>
    <PricePer>22.00</PricePer>
    <Quantity>10</Quantity>
    <Subtotal>220.00</Subtotal>
    <Description>Mighty Foobar Flange</Description>
  </Item>
  <Item id="3">
    <SKU>9982</SKU>
    <PricePer>2.50</PricePer>
    <Quantity>1000</Quantity>
    <Subtotal>2500.00</Subtotal>
    <Description>Deluxe Doohickie</Description>
  </Item>
  <Item id="4">
    <SKU>3256</SKU>
    <PricePer>389.00</PricePer>
    <Quantity>1</Quantity>
    <Subtotal>389.00</Subtotal>
    <Description>Muckalucket Bucket</Description>
  </Item>
  <NumberItems>1111</NumberItems>
  <Total>3704.00</Total>
  <OrderDate>07/07/2002</OrderDate>
  <OrderNumber>8876</OrderNumber>
</Order>
로그인 후 복사

우리는 웹 양식을 사용하여 이 XML 문서에 액세스합니다. 이 양식에는 SKU, 가격, 수량, 각 부품의 소계가 표시됩니다. 시퀀스의 각 옵션에 대한 설명입니다. 우리 양식에는 앞으로 및 뒤로 탐색 옵션에 대한 버튼도 포함되어 있습니다.

웹페이지 구성
웹페이지에서 중요한 부분은 표를 이용하여 화면에 읽기 쉽게 표시해보겠습니다. 다음은 HTML 테이블을 표시하는 코드 조각입니다.

<form>
  <table border="0">
    <tr><td>SKU</td><td><input type="text" name="SKU"></td></tr>
    <tr><td>Price</td><td><input type="text" name="Price"></td></tr>
    <tr><td>Quantity</td><td><input type="text" name="Quantity"></td></tr>
    <tr><td>Total</td><td><input type="text" name="Total"></td></tr>
    <tr><td>Description</td><td><input type="text"
 name="Description"></td></tr>
  </table>
  <input type="button" value="  <<  " onClick="getDataPrev();">  <input
 type="button" value="  >>  " onClick="getDataNext();">
  </form>
로그인 후 복사

테이블 아래에는 getDataNext() 및 getDataPrev() 함수를 통해 이전 및 다음 레코드를 검색하는 두 개의 버튼이 포함되어 있습니다. , 이것은 또한 우리가 논의하고 싶은 문제입니다.

스크립트
사실 저희 웹페이지에서 가장 중요한 부분은 폼이 아니라 폼을 제어하는 ​​스크립트입니다. 우리 스크립트에는 네 부분이 포함되어 있습니다. 먼저 XML 문서를 로드하여 웹페이지를 초기화합니다. 두 번째 부분은 다음 레코드로 이동하는 것입니다. 세 번째 단계는 이전 레코드로 이동하는 것입니다. 네 번째 부분은 XML 문서에서 단일 값을 추출하는 것입니다. 표 B는 웹페이지의 전체 내용을 보여줍니다.

테이블 B: jsxml.html

<html>
  <head>
    <script language="javaScript">
<!--
    vari = -1;
    varorderDoc = new ActiveXObject("MSXML2.DOMDocument.3.0");
    orderDoc.load("order.xml");
    var items = orderDoc.selectNodes("/Order/Item");
        
    function getNode(doc, xpath) {
      varretval = "";
      var value = doc.selectSingleNode(xpath);
      if (value) retval = value.text;
      return retval;
    }
    
    function getDataNext() {
      i++;
      if (i > items.length - 1) i = 0;
      document.forms[0].SKU.value = getNode(orderDoc, "/Order/Item[" +
 i + "]/SKU");
      document.forms[0].Price.value = getNode(orderDoc, "/Order/Item["
 + i + "]/PricePer");
      document.forms[0].Quantity.value = getNode(orderDoc,
 "/Order/Item[" + i + "]/Quantity");
      document.forms[0].Total.value = getNode(orderDoc, "/Order/Item["
 + i + "]/Subtotal");
      document.forms[0].Description.value = getNode(orderDoc,
 "/Order/Item[" + i + "]/Description");
    }
    
    function getDataPrev() {
      i--;
      if (i < 0) i = items.length - 1;
      
      document.forms[0].SKU.value = getNode(orderDoc, "/Order/Item[" +
 i + "]/SKU");
      document.forms[0].Price.value = getNode(orderDoc, "/Order/Item["
 + i + "]/PricePer");
      document.forms[0].Quantity.value = getNode(orderDoc,
 "/Order/Item[" + i + "]/Quantity");
      document.forms[0].Total.value = getNode(orderDoc, "/Order/Item["
+ i + "]/Subtotal");
      document.forms[0].Description.value = getNode(orderDoc,
 "/Order/Item[" + i + "]/Description");
    }
    
// -->
    </script>
  </head>
  <body onload="getDataNext()">
  <h2>XML Order Database</h2>
  <form>
  <table border="0">
    <tr><td>SKU</td><td><input type="text" name="SKU"></td></tr>
    <tr><td>Price</td><td><input type="text" name="Price"></td></tr>
    <tr><td>Quantity</td><td><input type="text"
 name="Quantity"></td></tr>
    <tr><td>Total</td><td><input type="text" name="Total"></td></tr>
    <tr><td>Description</td><td><input type="text"
 name="Description"></td></tr>
  </table>
  <input type="button" value="  <<  " onClick="getDataPrev();">  <input
 type="button" value="  >>  " onClick="getDataNext();">
  </form>  
  </body>
</html>
로그인 후 복사

실행
이 웹 페이지는 스크립트 초기화를 전달하고 실행합니다. order.xml 문서가 jsxml.html과 동일한 경로에 있는지 확인해야 합니다.

초기화 부분에서는 새 ActiveX 개체를 MSXML2.DOMDocument.3.0 개체 유형으로 인스턴스화한 다음 스크립트가 order.xml 문서를 메모리에 전달하고 모든 /Order/Item 노드를 선택합니다. /Order/Item 노드를 사용하여 문서에 이미 포함된 옵션을 식별합니다.

문서의 표준에는 getDataNext()를 호출하여 웹페이지를 초기화할 수 있는 onLoad 속성이 있습니다. 이 기능을 사용하면 XML 문서에서 다음 값을 가져와서 양식에 표시할 수 있습니다. 특정 옵션에 액세스하기 위해 간단한 색인을 사용합니다.

앞으로(>>) 버튼과 뒤로(<<) 버튼은 모두 동일한 메커니즘을 사용합니다. 먼저 onClick 이벤트에 대한 응답으로 getDataNext() 또는 getDataPrev()를 호출합니다. 이 두 함수는 문서 범위 외부의 레코드에 액세스하지 않도록 논리적인 방법을 사용합니다.

위 내용은 JavaScript를 사용하여 XML 데이터에 접근하는 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿