Files
pedwfrontend/lib/forms/parseFormXml.js
T

36 lines
1.0 KiB
JavaScript

// lib/forms/parseFormXml.js
import xpath from "xpath";
/**
* NOTE: Your current page uses DOMParser, which is available in the browser.
* For SSR parsing you'd usually use xmldom or a similar package.
*
* This module supports BOTH:
* - Browser: pass DOMParser output doc
* - Server: if you later add xmldom, pass its doc here
*/
export function getSectionCount(doc) {
const tabs = xpath.select("/form/tabs/tab[*]", doc);
return Array.isArray(tabs) ? tabs.length : 0;
}
export function getTabTitles(doc) {
// same XPath you had
const titleAttrs = xpath.select(
"//form/tabs/tab[*]/labels/label[@description]/@description",
doc
);
if (!Array.isArray(titleAttrs)) return [];
// Attribute nodes differ by parser; be defensive:
return titleAttrs
.map((n) => (typeof n?.value === "string" ? n.value : n?.toString?.()))
.filter(Boolean);
}
export function getTabs(doc) {
const tabs = xpath.select("//form/tabs/tab[*]", doc);
return Array.isArray(tabs) ? tabs : [];
}