اذهب إلى المحتوى

السؤال

نشر

في ملف xslt ذو الإصدار 1.0 على بيئة #C، أريد إدراج العديد من العناصر المفصولة بفواصل، والممثلة في الملف التالي:

<Orders>
  <Order>
    <Number>1</Number>
    <GenerateID>Y</GenerateID>
    <DeliveryMethods>
    <DeliveryMethod>Postal</DeliveryMethod>
    <DeliveryMethod>Mail</DeliveryMethod>
    </DeliveryMethods>
    <OrderIdentity>1FTHX26FXVEA28985</OrderIdentity>
    <Price>100</Price>
    <Quantity>5</Quantity>
  </Order>
</Orders>

وهذه هي محاولتي:

<xsl:variable name="DeliveryOptions>
<xsl:for-each select="DeliveryMethods/DeliveryMethod">
   <xsl:value-of select="DeliveryMethod"/>
   <xsl:if test="position() != last()">
      <xsl:text>,</xsl:text>
   </xsl:if>
</xsl:for-each>
</xsl-variable>

لكن على ما يبدو أن الأمر لم ينجح؟ كيف أتمكن من فعل ذلك بشكل صحيح؟

Recommended Posts

  • 0
نشر (معدل)

سنستعمل وظائف xsl لتحويل مدخلاته input إلى قيم مستخدمةoutput، وذلك باستخراج جميع القيم في ملف:

<xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
   </xsl:template>

  <xsl:template match="DeliveryMethods">
    <allmethods>
      <xsl:apply-templates select="DeliveryMethod"/>
    </allmethods>
  </xsl:template>

  <xsl:template match="DeliveryMethod">
    <xsl:value-of select="."/>
    <xsl:if test="position() != last()">
      <xsl:text>,</xsl:text>
    </xsl:if>
  </xsl:template>

قمت باستعمال DeliveryMethods لاستخراج القيم، لنحصل على :

<Orders>
  <Order>
    <Number>1</Number>
    <GenerateID>Y</GenerateID>
    <allmethods>Postal,Mail</allmethods>
    <OrderIdentity>1FTHX26FXVEA28985</OrderIdentity>
    <Price>100</Price>
    <Quantity>5</Quantity>
  </Order>
</Orders>

ويمكنك أيضا استعمال الشيفرة التالية لاستخلاص القيم من ملف xsl:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            string xml =
                "<Orders>" +
                  "<Order>" +
                    "<Number>1</Number>" +
                    "<GenerateID>Y</GenerateID>" +
                    "<DeliveryMethods>" +
                    "<DeliveryMethod>Postal</DeliveryMethod>" +
                    "<DeliveryMethod>Mail</DeliveryMethod>" +
                    "</DeliveryMethods>" +
                    "<OrderIdentity>1FTHX26FXVEA28985</OrderIdentity>" +
                    "<Price>100</Price>" +
                    "<Quantity>5</Quantity>" +
                  "</Order>" +
                "</Orders>";

            XDocument doc = XDocument.Parse(xml);

            XElement deliverMethod = new XElement("DeliveryMethod",string.Join(",",doc.Descendants("DeliveryMethod").Select(x => x.Value).ToArray()));
        }
    }
}

 

تم التعديل في بواسطة E.Nourddine

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...