// see http://www.w3.org/TR/xslt#function-element-available private bool ElementAvailable(string qname) { string name, prefix; PrefixQName.ParseQualifiedName(qname, out prefix, out name); string ns = this.manager.ResolveXmlNamespace(prefix); // msxsl:script - is not an "instruction" so we return false for it. if (ns == Keywords.s_XsltNamespace) { return( name == Keywords.s_ApplyImports || name == Keywords.s_ApplyTemplates || name == Keywords.s_Attribute || name == Keywords.s_CallTemplate || name == Keywords.s_Choose || name == Keywords.s_Comment || name == Keywords.s_Copy || name == Keywords.s_CopyOf || name == Keywords.s_Element || name == Keywords.s_Fallback || name == Keywords.s_ForEach || name == Keywords.s_If || name == Keywords.s_Message || name == Keywords.s_Number || name == Keywords.s_ProcessingInstruction || name == Keywords.s_Text || name == Keywords.s_ValueOf || name == Keywords.s_Variable ); } return(false); }
public override object Invoke(XsltContext xsltContext, object[] args, XPathNavigator docContext) { XsltCompileContext xsltCompileContext = (XsltCompileContext)xsltContext; ArrayList ResultList = new ArrayList(); string local, prefix; PrefixQName.ParseQualifiedName(ToString(args[0]), out prefix, out local); string ns = xsltContext.LookupNamespace(prefix); XmlQualifiedName qname = new XmlQualifiedName(local, ns); XPathNodeIterator it = args[1] as XPathNodeIterator; if (it != null) { while (it.MoveNext()) { xsltCompileContext.FindKeyMatch(qname, it.Current.Value, ResultList, docContext); } } else { xsltCompileContext.FindKeyMatch(qname, ToString(args[1]), ResultList, docContext); } return(new XPathArrayIterator(ResultList)); }
internal XmlQualifiedName CreateXmlQName(string qname) { string prefix, local; PrefixQName.ParseQualifiedName(qname, out prefix, out local); return(new XmlQualifiedName(local, this.scopeManager.ResolveXmlNamespace(prefix))); }
// see: http://www.w3.org/TR/xslt#function-function-available private bool FunctionAvailable(string qname) { string name, prefix; PrefixQName.ParseQualifiedName(qname, out prefix, out name); string ns = LookupNamespace(prefix); if (ns == Keywords.s_MsXsltNamespace) { return(name == f_NodeSet); } else if (ns == string.Empty) { return( // It'll be better to get this information from XPath name == "last" || name == "position" || name == "name" || name == "namespace-uri" || name == "local-name" || name == "count" || name == "id" || name == "string" || name == "concat" || name == "starts-with" || name == "contains" || name == "substring-before" || name == "substring-after" || name == "substring" || name == "string-length" || name == "normalize-space" || name == "translate" || name == "boolean" || name == "not" || name == "true" || name == "false" || name == "lang" || name == "number" || name == "sum" || name == "floor" || name == "ceiling" || name == "round" || // XSLT functions: (s_FunctionTable[name] != null && name != "unparsed-entity-uri") ); } else { // Is this script or extention function? object extension; return(GetExtentionMethod(ns, name, /*argTypes*/ null, out extension) != null); } }
private String FormatNumber(double value, string formatPattern, String formatName) { string ns = string.Empty, local = string.Empty; if (formatName != null) { string prefix; PrefixQName.ParseQualifiedName(formatName, out prefix, out local); ns = LookupNamespace(prefix); } DecimalFormat formatInfo = this.processor.RootAction.GetDecimalFormat(new XmlQualifiedName(local, ns)); if (formatInfo == null) { if (formatName != null) { throw new XsltException(Res.Xslt_NoDecimalFormat, formatName); } formatInfo = new DecimalFormat(new NumberFormatInfo(), '#', '0', ';'); } int[] groupsize = { ValidateFormat(ref formatPattern, formatInfo, value < 0) }; NumberFormatInfo numberInfo = formatInfo.info; numberInfo.NumberGroupSizes = groupsize; String result = value.ToString(formatPattern, numberInfo); if (formatInfo.zeroDigit != '0') { StringBuilder builder = new StringBuilder(result.Length); int startingLetter = Convert.ToInt32(formatInfo.zeroDigit) - Convert.ToInt32('0');; for (int i = 0; i < result.Length; i++) { if (result[i] >= '0' && result[i] <= '9') { builder.Append((char)(Convert.ToInt32(result[i]) + startingLetter)); } else { builder.Append(result[i]); } } result = builder.ToString(); } return(result); }
void NameTest(String name, Compiler compiler) { if (name == "*") { return; } if (name.EndsWith(":*")) { if (!PrefixQName.ValidatePrefix(name.Substring(0, name.Length - 3))) { throw XsltException.InvalidAttrValue(compiler.Input.LocalName, name); } } else { string prefix, localname; PrefixQName.ParseQualifiedName(name, out prefix, out localname); } }
private String SystemProperty(string qname) { String result = String.Empty; string prefix; string local; PrefixQName.ParseQualifiedName(qname, out prefix, out local); // verify the prefix corresponds to the Xslt namespace string urn = LookupNamespace(prefix); if (urn == Keywords.s_XsltNamespace) { if (local == "version") { result = "1"; } else if (local == "vendor") { result = "Microsoft"; } else if (local == "vendor-url") { result = "http://www.microsoft.com"; } } else { if (urn == null && prefix != null) { // if prefix exist it has to be mapped to namespace. // Can it be "" here ? throw new XsltException(Res.Xslt_InvalidPrefix, prefix); } return(String.Empty); } return(result); }
private XmlDataType ParseDataType(string value, InputScopeManager manager) { if (value == null) // Avt is not constant, or attribute wasn't defined { return(XmlDataType.Text); } if (value == Keywords.s_Text) { return(XmlDataType.Text); } if (value == Keywords.s_Number) { return(XmlDataType.Number); } String prefix, localname; PrefixQName.ParseQualifiedName(value, out prefix, out localname); manager.ResolveXmlNamespace(prefix); if (prefix == String.Empty && !this.forwardCompatibility) { throw XsltException.InvalidAttrValue(Keywords.s_DataType, value); } return(XmlDataType.Text); }
internal void SetQName(string qname) { PrefixQName.ParseQualifiedName(qname, out Prefix, out Name); }