كيف يمكنني تحويل XmlNodeList إلى NodeSet لاستخدامها داخل XSLT؟

StackOverflow https://stackoverflow.com/questions/157554

  •  03-07-2019
  •  | 
  •  

سؤال

ولقد حصلت على XmlNodeList التي أحتاج أن يكون ذلك في شكل أستطيع أن ثم إعادة استخدامها في ورقة أنماط XSLT عن طريق استدعاء من أسلوب C # التمديد.

ويمكن لأي شخص أن تساعد؟ لقد قرأت أنه قد يكون لها علاقة ما مع استخدام XPathNavigator ولكن أنا لا تزال عالقة قليلا.

هل كانت مفيدة؟

المحلول

وكان علي أن حل هذه المسألة نفسي بضع سنوات مضت. وكانت الطريقة الوحيدة التي يمكنني تمكنت من خلق جزء XML التي تحتوي على العقد في قائمة عقدة ثم تمرير في الأطفال من جزء.

XsltArgumentList arguments = new XsltArgumentList();
XmlNodeList nodelist;
XmlDocument nodesFrament = new XmlDocument();
XmlNode root = nodesFragment.CreateElement("root");
foreach (XmlNode node in nodeList)
{
    root.AppendChild(node);
}
nodesFragment.AppendChild(root);

arguments.AddParam("argumentname", string.Empty, nodesFragment.CreateNavigator().SelectChildren(XPathNodeType.All));

وبعد ذلك كنت بحاجة للتأكد من أن لديك الحجة المقابلة في XSLT الخاصة بك، بطبيعة الحال.

وتجدر الإشارة إلى أنك ربما لا تحتاج إلى XmlDocument إضافية. هل يمكن أن مجرد دعوة CreateNavigator () على سبيل المثال XmlNode الجذر واستخدام XmlDocument الموجودة لديك لخلق عنصر (كتبت هذا الرمز منذ بعض الوقت، وتعلمت أكثر منذ ذلك الحين - ولكن أنا أعلم أن رمز أعلاه يعمل، وأنا لم حاول أي بدائل).

نصائح أخرى

وكانت الملاحظة في نهاية الأكثر فائدة، وأنا حولت انفاكت وXmlNodeList إلى XmlDocument بالفعل حتى يمكن فقط استخدام المستكشف على وجود وخلق بأنها XPathNodeIterator.

وشكرا لك مساعدة!

ولم تنجح مع الجواب المقدم من قبل.

<ع> استخدام AppendChild () لإضافة العقد المحدد سابقا من XmlNodeList إلى مستند جديد أدى إلى استثناء على محاولة إلحاق العقد تنشأ من سياق وثيقة مختلفة. العديد من التجارب لإصلاح هذا شمل مضيفا لا بد لي مخصصة مساحة الاسم الافتراضية العقد المحدد في القائمة ل. وأخيرا لقد تركت النهج تماما وتحولت الطريقة يمكنني تحديد العقد في الحالات XmlNodeList.

وبدلا من

myXmlNode.SelectNodes( xpath, nsmgr )

وأنا أستخدم

myXmlNode.CreateNavigator().Select( xpath, nsmgr )

للحصول على XPathNodeIterator بدلا من XmlNodeList. والآن إضافة XPathNodeIterator الناتجة من التعليمات البرمجية الثاني بشكل صحيح كقيمة معلمة إلى XsltArgumentsList.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top