XML with JavaScript

JavaScript handles XML natively in browsers through the DOM API and the XMLHttpRequest / Fetch API. On the server side, Node.js uses libraries to parse and generate XML. JavaScript developers work with XML most often when consuming XML-based APIs, processing RSS feeds, or working with SVG.

Parsing XML from a String

var xmlString = `<products>
  <product id="P001">
    <name>Keyboard</name>
    <price>1199</price>
    <inStock>true</inStock>
  </product>
  <product id="P002">
    <name>Mouse</name>
    <price>799</price>
    <inStock>false</inStock>
  </product>
</products>`;

var parser = new DOMParser();
var doc = parser.parseFromString(xmlString, "text/xml");

// Check for errors
if (doc.querySelector("parsererror")) {
  console.error("Invalid XML");
}

Reading Data

var products = doc.getElementsByTagName("product");

for (var i = 0; i < products.length; i++) {
  var p = products[i];
  console.log({
    id:      p.getAttribute("id"),
    name:    p.getElementsByTagName("name")[0].textContent,
    price:   p.getElementsByTagName("price")[0].textContent,
    inStock: p.getElementsByTagName("inStock")[0].textContent
  });
}

Output

{ id: "P001", name: "Keyboard", price: "1199", inStock: "true" }
{ id: "P002", name: "Mouse",    price: "799",  inStock: "false" }

Fetching XML from a Server

// Modern Fetch API
fetch("https://api.example.com/products.xml")
  .then(response => response.text())
  .then(text => {
    var doc = new DOMParser().parseFromString(text, "text/xml");
    var items = doc.getElementsByTagName("product");
    Array.from(items).forEach(item => {
      console.log(item.getElementsByTagName("name")[0].textContent);
    });
  });

Building XML with JavaScript

var doc = document.implementation.createDocument("", "products", null);
var root = doc.documentElement;

// Create a product element
var product = doc.createElement("product");
product.setAttribute("id", "P003");

var name = doc.createElement("name");
name.textContent = "Monitor";

var price = doc.createElement("price");
price.textContent = "8999";

product.appendChild(name);
product.appendChild(price);
root.appendChild(product);

// Serialize to string
var serializer = new XMLSerializer();
var xmlStr = serializer.serializeToString(doc);
console.log(xmlStr);

Output

<products><product id="P003"><name>Monitor</name><price>8999</price></product></products>

Using XPath in JavaScript

var result = doc.evaluate(
  "//product[price > 1000]/name",
  doc,
  null,
  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
  null
);

for (var i = 0; i < result.snapshotLength; i++) {
  console.log(result.snapshotItem(i).textContent);
}
// Output: Keyboard, Monitor

Key Points to Remember

  • DOMParser parses XML strings into a navigable DOM document.
  • Use fetch() or XMLHttpRequest to retrieve XML from a server.
  • XMLSerializer converts a DOM document back into an XML string.
  • document.evaluate() runs XPath queries in the browser.
  • All textContent from XML is a string — convert to numbers with parseInt() or parseFloat().

Leave a Comment

Your email address will not be published. Required fields are marked *