كيفية تعريف دالة معرفة من قبل المستخدم العودة عقدة ؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

أريد شيئا من هذا القبيل:

<msxsl:script language="C#">
   ??? getNodes() { ... return ... }
</msxsl:script>

<xsl:for-each select="user:getNodes()">
    ...
</xsl:for-each>

ما نوع الإرجاع يجب استخدامها ل getNodes() و ما يجب أن أضع في الجسم ؟

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

المحلول

من حيث المبدأ تحتاج إلى استخدام XPathNodeIterator العودة عقدة مجموعات (كما Samjudson يقول).أنا أعتبر أن المثال الذي أعطيته هو تحولت وظيفة ، كما لم يكن العرض مع أية معلمات.ومع ذلك, أعتقد أنه من المفيد انظر كيف يمكن أن افتعال العقد من العدم.

<msxsl:script language="C#">
   XPathNodeIterator getNodes() 
   { 
      XmlDocument doc = new XmlDocument();
      doc.PreserveWhitespace = true;
      doc.LoadXml("<root><fld>val</fld><fld>val2</fld></root>");
      return doc.CreateNavigator().Select("/root/fld");
   }
</msxsl:script>

ومع ذلك ، عادة ما كنت تريد أن تفعل شيئا في وظيفة الخاص بك غير ممكن في xslt, مثل تصفية عقدة تعيين على أساس بعض المعايير.المعايير التي يتم تنفيذها على نحو أفضل من خلال رمز أو يعتمد om بعض البيانات الخارجية الهيكل.خيار آخر هو أن كنت لتبسيط الالفاظ التعبير (كما في المثال أدناه).ثم يمكنك تمرير بعض المعلمات لك getNodes وظيفة.البساطة في استخدام XPath على أساس تصفية ولكن يمكن أن يكون أي شيء:

   <msxsl:script language="C#">
       XPathNodeIterator getNodes(XPathNodeIterator NodesToFilter, string Criteria)
      {
         XPathNodeIterator x = NodesToFilter.Current.Select("SOMEVERYCOMPLEXPATH["+Criteria+"]");
         return x;
      }
   </msxsl:script>
   <xsl:for-each select="user:getNodes(values/val,'SomeCriteria')">
    ...
  </xsl:for-each>

تأمل هذا يساعد ، بوعز

نصائح أخرى

سريع في جوجل عن C# xslt msxml كشفت ارتباط إلى الصفحة التالية والتي تعطي العديد من الأمثلة على تمديد XSLT في microsoft البيئات.

http://msdn.microsoft.com/en-us/magazine/cc302079.aspx

وتحديدا القسم على أنواع الخرائط بين XSLT و .صافي يعطيك بالضبط ما تحتاجه من معلومات:

W3C XPath نوع مكافئ .NET فئة (نوع)

  • سلسلة النظام.سلسلة
  • منطقية النظام.منطقية
  • رقم النظام.مزدوج
  • نتيجة شجرة جزء - نظام.Xml.XPath.XPathNavigator
  • تعيين عقدة النظام.Xml.XPath.XPathNodeIterator

لذلك في المثال الخاص بك وأود أن محاولة XPathNodeLiterator.

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