XML Parser
Converting XML text into usable document objects
🔍 What is an XML Parser?
An XML parser reads XML documents and converts them into a structured format that programs can manipulate. It validates syntax, checks structure, and creates a document object for easy data access.
// Parse XML string
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText, "text/xml");
Result:
XML text is converted into a DOM object you can navigate and manipulate.
Parser Concepts
Read
Parse XML text into objects
parser.parseFromString(xml, "text/xml")
Validate
Check XML syntax and structure
if (xmlDoc.documentElement.nodeName === "parsererror")
Navigate
Access elements and attributes
xmlDoc.getElementsByTagName("item")
Manipulate
Modify XML document structure
element.setAttribute("id", "123")
🔹 Using DOMParser
DOMParser is the built-in JavaScript parser for converting XML strings into DOM documents. It's available in all modern browsers.
<!DOCTYPE html>
<html>
<body>
<h2>XML Parser Example</h2>
<div id="output"></div>
<script>
// XML string
const xmlString = `
<?xml version="1.0"?>
<bookstore>
<book category="fiction">
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
<price>10.99</price>
</book>
<book category="science">
<title>A Brief History of Time</title>
<author>Stephen Hawking</author>
<price>15.99</price>
</book>
</bookstore>`;
// Create parser
const parser = new DOMParser();
// Parse XML
const xmlDoc = parser.parseFromString(xmlString, "text/xml");
// Extract data
const books = xmlDoc.getElementsByTagName("book");
let output = "<h3>Parsed Books:</h3>";
for (let i = 0; i < books.length; i++) {
const title = books[i].getElementsByTagName("title")[0].textContent;
const author = books[i].getElementsByTagName("author")[0].textContent;
const price = books[i].getElementsByTagName("price")[0].textContent;
const category = books[i].getAttribute("category");
output += `<p><strong>${title}</strong> by ${author} - $${price} (${category})</p>`;
}
document.getElementById("output").innerHTML = output;
</script>
</body>
</html>
Output:
Parsed Books:
The Great Gatsby by F. Scott Fitzgerald - $10.99 (fiction)
A Brief History of Time by Stephen Hawking - $15.99 (science)
🔹 Parser Error Handling
Always check for parsing errors when working with XML. Invalid XML will generate a parsererror document instead of your expected structure.
function parseXMLSafely(xmlString) {
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, "text/xml");
// Check for parsing errors
const parserError = xmlDoc.getElementsByTagName("parsererror");
if (parserError.length > 0) {
console.error("XML Parsing Error:");
console.error(parserError[0].textContent);
return null;
}
console.log("XML parsed successfully!");
return xmlDoc;
}
// Valid XML
const validXML = "<root><item>Value</item></root>";
const doc1 = parseXMLSafely(validXML); // Success
// Invalid XML (missing closing tag)
const invalidXML = "<root><item>Value</root>";
const doc2 = parseXMLSafely(invalidXML); // Error detected
Console Output:
✓ XML parsed successfully!
✗ XML Parsing Error: Opening and ending tag mismatch
🔹 Accessing Parsed Data
Once XML is parsed, you can access elements, attributes, and text content using various DOM methods. Here are the most common techniques.
const xmlString = `
<library>
<book id="B001">
<title>XML Basics</title>
<author>John Smith</author>
</book>
</library>`;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, "text/xml");
// Get elements by tag name
const books = xmlDoc.getElementsByTagName("book");
console.log("Number of books: " + books.length);
// Get first book
const firstBook = books[0];
// Get attribute
const bookId = firstBook.getAttribute("id");
console.log("Book ID: " + bookId);
// Get child element text
const title = firstBook.getElementsByTagName("title")[0].textContent;
console.log("Title: " + title);
// Get author
const author = firstBook.getElementsByTagName("author")[0].textContent;
console.log("Author: " + author);
// Get root element
const root = xmlDoc.documentElement;
console.log("Root element: " + root.nodeName);
Console Output:
Number of books: 1
Book ID: B001
Title: XML Basics
Author: John Smith
Root element: library
🔹 Creating XML with Parser
You can also create new XML documents programmatically using the DOM methods. This is useful for generating XML data dynamically.
// Create a new XML document
const xmlDoc = document.implementation.createDocument("", "", null);
// Create root element
const root = xmlDoc.createElement("products");
xmlDoc.appendChild(root);
// Create product element
const product = xmlDoc.createElement("product");
product.setAttribute("id", "P001");
// Create child elements
const name = xmlDoc.createElement("name");
name.textContent = "Laptop";
product.appendChild(name);
const price = xmlDoc.createElement("price");
price.textContent = "999.99";
product.appendChild(price);
// Add product to root
root.appendChild(product);
// Serialize to string
const serializer = new XMLSerializer();
const xmlString = serializer.serializeToString(xmlDoc);
console.log(xmlString);
Generated XML:
<products>
<product id="P001">
<name>Laptop</name>
<price>999.99</price>
</product>
</products>
🔹 Parser Best Practices
Follow these guidelines to work effectively with XML parsers and avoid common pitfalls.
Best Practices:
- Always check for parsing errors before using the document
- Use try-catch blocks when parsing external XML
- Validate XML structure matches your expectations
- Cache parsed documents if used multiple times
- Use querySelector for complex element selection
- Handle missing elements gracefully
- Consider using XPath for advanced queries
function safeGetElement(xmlDoc, tagName, defaultValue = "") {
try {
const elements = xmlDoc.getElementsByTagName(tagName);
if (elements.length > 0) {
return elements[0].textContent;
}
return defaultValue;
} catch (error) {
console.error("Error accessing element:", error);
return defaultValue;
}
}