を返すこれが私のコードの簡易版サクソンXQueryEvaluator.EvaluateがTinyElementImpl代わりのXdmNode
Processor processor = new Processor();
DocumentBuilder documentBuilder = processor.NewDocumentBuilder();
documentBuilder.IsLineNumbering = true;
documentBuilder.WhitespacePolicy = WhitespacePolicy.PreserveAll;
XQueryCompiler compiler = processor.NewXQueryCompiler();
string query = BuildXqueryString();
if (!String.IsNullOrEmpty(query))
{
XQueryExecutable executable = compiler.Compile(query);
XQueryEvaluator evaluator = executable.Load();
evaluator.ContextItem = documentBuilder.Build(xmlNode);
var evaluations = evaluator.Evaluate();
foreach (var evaluation in evaluations)
runEvaluation((XdmNode)evaluation, document);
}
これは私が今持っているものであると期待どおりに動作しますです。今、私たちは評価を並列化するためにいくつかの変更を行っています。最後のforeachを修正してParallel.ForEachに変更する問題があります。 GetList()
は私にnet.sf.saxon.tree.tiny.TinyElementImpl
代わりのSaxon.Api.XdmNode
のリストを返しているので、
List<XdmNode> evaluationsAsList = evaluations.GetList().Cast<XdmNode().ToList();
Parallel.ForEach(evaluationsAsList, evaluation =>
runEvaluation(evaluation, document)
);
このコードは失敗します。これは、foreachのを交換する私の新しいコードです。ドキュメントGetList()
によれば、常に少なくともSaxon.Api.XdmItem
のリストを返すべきであり、そうでない場合もあります。
アイデア?
こんにちは、これを再現しようとしていますが、次のような問題があります。リスト evaluateationsAsList = evaluate.GetList()。Cast
ond1
これはちょうど 'XdmNode'のリストを取得しようとするテストでしたが、正しいアプローチでなければならないかどうかはわかりません。私が達成したいのは、 'Evaluator.Evaluate()'の結果を 'Parallel.ForEach'の中で使うことです。 – Ricardo