private static PrefixQName CreateAttributeQName(string name, string nsUri, InputScopeManager manager) {
// if name == "xmlns" we don't need to generate this attribute.
// to avoid i'ts generation we can return false and not add AtributeCation to it's parent container action
// for now not creating this.qname will do the trick at execution time
if (name == Keywords.s_Xmlns) return null;
if (nsUri == Keywords.s_XmlnsNamespace) {
throw XsltException.Create(Res.Xslt_ReservedNS, nsUri);
}
PrefixQName qname = new PrefixQName();
qname.SetQName(name);
qname.Namespace = nsUri != null ? nsUri : manager.ResolveXPathNamespace(qname.Prefix);
if (qname.Prefix.StartsWith("xml", StringComparison.Ordinal)) {
if (qname.Prefix.Length == 3) { // prefix == "xml"
if (qname.Namespace == Keywords.s_XmlNamespace && (qname.Name == "lang" || qname.Name == "space")) {
// preserve prefix for xml:lang and xml:space
}
else {
qname.ClearPrefix();
}
}
else if (qname.Prefix == Keywords.s_Xmlns) {
if (qname.Namespace == Keywords.s_XmlnsNamespace) {
// if NS wasn't specified we have to use prefix to find it and this is imposible for 'xmlns'
throw XsltException.Create(Res.Xslt_InvalidPrefix, qname.Prefix);
}
else {
qname.ClearPrefix();
}
}
}
return qname;
}