سؤال

أريد إنشاء العنصر التالي:

<exercises xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">

إذا كنت أستخدم شيئًا مثل هذا:

<xsl:element name="excercises">
<xsl:attribute name="xmlns:xsi" namespace="http://www.w3.org/2001/XMLSchema-instance"/>

ثم يقوم بإنشاء شيء مثل هذا:

<excercises xp_0:xsi="" xmlns:xp_0="http://www.w3.org/2001/XMLSchema-instance">

والذي لا يشبه ما أريد...

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

المحلول

وحاول القيام بما يلي بدلا من ذلك:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

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

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

    <xsl:template match="xml">
        <xsl:element name="exercises">
            <xsl:attribute name="xsi:noNamespaceSchemaLocation">mySchema.xsd</xsl:attribute>
            some value
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

والقلق الرئيسي هو للإعلان عن مساحة XSI في الإعلان.

ولقد قدمت للتو المباراة القالب على مجرد اختبار.

نصائح أخرى

هنا كيف يمكن القيام بذلك:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 exclude-result-prefixes="xsi">
    <xsl:output omit-xml-declaration="yes"/>
    <!--                                   -->
    <xsl:template match="/">
      <exercises  xsi:noNamespaceSchemaLocation="mySchema.xsd"/>
    </xsl:template>
</xsl:stylesheet>

عندما يتم تطبيق هذا التحول في أي مستند XML مصدر (غير مستخدم)، يتم إنتاج النتيجة المطلوبة:

<exercises xsi:noNamespaceSchemaLocation="mySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />

ليس من الضروري استخدامه <xsl:attribute> في حالتك, ولكن إذا لزم الأمر، يمكن استخدامه دون أي مشكلة:

    <xsl:attribute name="xsi:noNamespaceSchemaLocation">
      <xsl:value-of select="'mySchema.xsd'"/>
    </xsl:attribute>

لاحظ أنه من الممارسات الجيدة تحديد مساحات الأسماء الضرورية في ملف <xsl:stylesheet> عنصر بحيث يمكن (إعادة) استخدامها بسهولة في كل مكان تحتاج إليه.يعد هذا مفيدًا بشكل خاص، إذا كانت هناك حاجة إلى مساحة اسم معينة على أكثر من عنصر أو سمة تم إنشاؤها.

في هذه الحالة، من الجيد أيضًا تحديد كل هذه البادئات في قيمة exclude-result-prefixes يصف بحيث لا يتم نشر مساحات الأسماء تلقائيًا على جميع عناصر النتائج الحرفية.

هل يمكن ببساطة استخدام: -

<exercises xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">

ومباشرة في XSL الخاص بك، التي من شأنها العمل، أنت فقط بحاجة فعلا XSL: العنصر إذا لا يمكن بجد رمز اسم العلامة. وبالمثل مع سمات يمكنك إضافتها مباشرة إلا إذا كنت بحاجة للتأكد مشروطة.

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