+2003-12-16 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
+
+ * Compiler.cs, XslTransformProcessor.cs :
+ Use XmlValidatingReader to support id() for external stylesheets.
+ * XslKey.cs, XsltCompiledContext.cs :
+ to evaluate MatchPattern and UsePattern, SetContext() is required.
+ * XslTemplate.cs : Forgot to commit. Change is below(12/16).
+
2003-12-16 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
* Emitter.cs, HtmlEmitter.cs, XmlWriterEmitter.cs :
using (Stream s = (Stream)res.GetEntity (absUri, null, typeof(Stream)))
{
- XPathNavigator n = new XPathDocument (new XmlTextReader (absUri.ToString (), s), XmlSpace.Preserve).CreateNavigator ();
+ XmlValidatingReader vr = new XmlValidatingReader (new XmlTextReader (absUri.ToString (), s));
+ vr.ValidationType = ValidationType.None;
+ XPathNavigator n = new XPathDocument (vr, XmlSpace.Preserve).CreateNavigator ();
+ vr.Close ();
n.MoveToFirstChild ();
do {
if (n.NodeType == XPathNodeType.Element)
public XPathExpression UsePattern { get { return usePattern; }}
public XPathExpression MatchPattern { get { return matchPattern; }}
- public bool Matches (XPathNavigator nav, string value)
+ public bool Matches (XPathNavigator nav, XmlNamespaceManager nsmgr, string value)
{
-
+ MatchPattern.SetContext (nsmgr);
+ UsePattern.SetContext (nsmgr);
if (!nav.Matches (MatchPattern))
return false;
Debug.WriteLine ("? " + nav.Name);
class XsltKey : XPathFunction {
Expression arg0, arg1;
XmlNamespaceManager nsm;
+ XslKey key;
public XsltKey (FunctionArguments args, IStaticXsltContext ctx) : base (args)
{
{
ArrayList result = new ArrayList ();
QName name = XslNameUtil.FromString (arg0.EvaluateString (iter), nsm);
+ XsltCompiledContext ctx = iter.NamespaceManager as XsltCompiledContext;
+ if (key == null)
+ key = ctx.Processor.CompiledStyle.Style.FindKey (name);
+
object o = arg1.Evaluate (iter);
XPathNodeIterator it = o as XPathNodeIterator;
if (it != null) {
while (it.MoveNext())
- FindKeyMatch ((iter.NamespaceManager as XsltCompiledContext), name, it.Current.Value, result, iter.Current);
+ FindKeyMatch (ctx, it.Current.Value, result, iter.Current);
} else {
- FindKeyMatch ((iter.NamespaceManager as XsltCompiledContext), name, XPathFunctions.ToString (o), result, iter.Current);
+ FindKeyMatch (ctx, XPathFunctions.ToString (o), result, iter.Current);
}
return new EnumeratorIterator (result.GetEnumerator (), (iter.NamespaceManager as XsltCompiledContext));
}
- void FindKeyMatch (XsltCompiledContext xsltContext, QName name, string value, ArrayList result, XPathNavigator context)
+ void FindKeyMatch (XsltCompiledContext xsltContext, string value, ArrayList result, XPathNavigator context)
{
XPathNavigator searchDoc = context.Clone ();
searchDoc.MoveToRoot ();
- XslKey key = xsltContext.Processor.CompiledStyle.Style.FindKey (name);
if (key != null) {
XPathNodeIterator desc = searchDoc.SelectDescendants (XPathNodeType.All, true);
while (desc.MoveNext ()) {
- if (key.Matches (desc.Current, value))
+ if (key.Matches (desc.Current, xsltContext, value))
AddResult (result, desc.Current);
if (desc.Current.MoveToFirstAttribute ()) {
do {
- if (key.Matches (desc.Current, value))
+ if (key.Matches (desc.Current, xsltContext, value))
AddResult (result, desc.Current);
} while (desc.Current.MoveToNextAttribute ());