if (root) {
root = false;
if (copyAttributes) {
XdmSequenceIterator iter = xinclude.axisIterator(Axis.ATTRIBUTE);
while (iter.hasNext()) {
XdmNode child = (XdmNode) iter.next();
boolean copy = !"".equals(child.getNodeName().getNamespaceURI()); // must be in a ns
// Can't copy xml:base it'll get relative URIs wrong and it's controlled separately
copy = copy && !(XProcConstants.xml_base.equals(child.getNodeName()));
// Don't copy xml:lang, it's controlled separately
copy = copy && !(XProcConstants.xml_lang.equals(child.getNodeName()));
if (copy) {
copied.add(child.getNodeName());
matcher.addAttribute(child);
}
}
}
XdmSequenceIterator iter = node.axisIterator(Axis.ATTRIBUTE);
while (iter.hasNext()) {
XdmNode child = (XdmNode) iter.next();
if ((XProcConstants.xml_base.equals(child.getNodeName()) && fixupBase)
|| (XProcConstants.xml_lang.equals(child.getNodeName()) && fixupLang)) {
// nop;
} else {
if (!copied.contains(child.getNodeName())) {
copied.add(child.getNodeName());
matcher.addAttribute(child);
}
}
}
if (fixupBase) {
copied.add(XProcConstants.xml_base);
matcher.addAttribute(XProcConstants.xml_base, node.getBaseURI().toASCIIString());
}
String lang = getLang(node);
if (fixupLang && lang != null) {
copied.add(XProcConstants.xml_lang);
matcher.addAttribute(XProcConstants.xml_lang, lang);
}
} else {
// Careful. Don't copy ones you've already copied...
XdmSequenceIterator iter = node.axisIterator(Axis.ATTRIBUTE);
while (iter.hasNext()) {
XdmNode child = (XdmNode) iter.next();
if (!copied.contains(child.getNodeName())) {
matcher.addAttribute(child);
}
}
}