سؤال

هل يعرف أي شخص مثالًا على تحديد نوع البيانات باستخدام مخطط XML واستخدامه في قالب XSL مع XSL: SITE SUSSION

شكرا لك مقدما.

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

المحلول

في XSLT 2.0 data-type سمة <xsl:sort> يبقى فقط للتوافق مع XSLT 1.0.

تتم مقارنة قيم مفتاح الفرز باستخدام lt مشغل مقارنة القيمة. هذا يعني أنه لم يعد من الضروري توفير نوع "النص" أو "الرقم" كقيمة data-type ينسب. إذا كان نوع التعبير الذي يحدد مفتاح الفرز xs:string ثم lt مشغل ل xs:string يستخدم.

إذا كان نوع مفتاح الفرز ليس سلسلة أو رقمًا ، ولكن لديه lt المشغل ، ثم lt يتم استخدام مشغل لهذا النوع. علي سبيل المثال، xs:date, xs:dateTime, ، ... ... ، إلخ ، يمكن فرزها بشكل صحيح وهذا لا يتطلب تحديد أي قيمة ل data-type ينسب.

من المحتمل أن يفتقر نوع محدد من قبل المستخدم lt السمة ، مما يعني أنه إذا كانت مفاتيح الفرز من هذا النوع ، فسوف تفشل عملية الفرز.

بالطبع ، يمكن للمرء دائمًا تقديم تعبير في select السمة التي هي إشارة إلى xsl:function تم توفير المستخدم بشكل خاص لتحويل مثيل النوع المعرفة من قبل المستخدم إلى نوع يحتوي على lt المشغل أو العامل.

نصائح أخرى

لإعطائك مثالًا طلبته ، افترض أن لدينا اختبار ملف المخطط 2010083101xsd.xml على النحو التالي:

<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="root">
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded">
        <xs:element name="data" type="xs:double"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

مستند إدخال XML على النحو التالي:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test2010083101Xsd.xml">
  <data>2</data>
  <data>10</data>
  <data>1.5</data>
</root>

وملاءة أنماط XSLT 2.0 على النحو التالي:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="root/data">
      <xsl:sort select="."/>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="data">
    <xsl:value-of select="concat(., '&#10;')"/>
  </xsl:template>

</xsl:stylesheet>

ثم عندما تقوم بتشغيل ورقة الأنماط باستخدام أدوات AltovaxML (معالج Schema يدرك XSLT 2.0 الذي يأخذ XSI: NonamespacesChemalocation في الاعتبار) مع

AltovaXML.exe /xslt2 test2010083101Xsl.xml /in test2010083101.xml

الإخراج هو

1.5
2
10

لذلك يتم أخذ XS: نوع البيانات المزدوجة في الاعتبار عند فرز عناصر "البيانات".

عندما تقوم بتشغيل نفس ورقة الأنماط مقابل نفس مستند إدخال XML مع معالج XSLT 2.0 الذي لا يدرك المخطط (مثل Saxon 9.2 Home Edition) ، فإن الإخراج مختلف:

1.5
10
2

كما في هذه الحالة ، يتم فرز القيم كسلاسل.

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