مطابقة التعبير داخل قسم البيانات لعنصر XML باستخدام XSL
سؤال
مرحبًا ، أنا عادةً ما أقوم برمجة في C ++ ، لذا فإن XML/XSL/XPath ليس جانبي القوي ، لكنني بحاجة إلى إجراء تحول ولا يمكنني العثور على طريقة جيدة للقيام بذلك.
لدينا ملف XML تم تنسيقه مثل هذا:
<outer>
<element/>
<other_element/>
<message pri="info">
[[!CDATA Error: something is not working]]
</message>
<message pri="info">
[[!CDATA Warning: warnings are boring]]
</message>
</outer>
أحتاج إلى XSL الذي يمكنه تحويل هذا إلى نفس ملف XML بالضبط ، باستثناء أنه يطابق "الخطأ:" جزء ، ويغير سمة PRI إلى "Error".
أحتاج إلى القيام بذلك باستخدام XSL Transformaton ، وبدأت في النظر إلى XPath ، لكن لدي صعوبة في معرفة كيف يمكنني تحقيق ذلك.
وصلت إلى حد مطابقة الرسائل مع أ
<xsl:template match="message">
<xsl:choice>
<xsl:when test="tricky part">
</xsl:when>
<xsl:otherwise>
<xsl:justcopythetag>
</xsl:otherwise>
</xsl:choice>
</xsl:template>
لقد اكتشفت كيفية نسخ علامات الرسائل الأخرى ، لكن ليس لدي أدنى فكرة عن كيفية مطابقة جزء "الخطأ".
هل يستطيع أي أحد مساعدتي؟
المحلول
أنت تبحث فقط عن السلسلة "خطأ:" أليس كذلك؟
<xsl:when test="contains(text(),'Error:')">
</xsl:when>
ال contains()
إرجاع صحيح إذا كانت المعلمة الأولى تحتوي على الثانية.
نصائح أخرى
...
<xsl:when test="contains(., 'Error')">
<message pri="error"><xsl:value-of select="."/></message>
</xsl:when>
...otherwise
لا تنتمي إلى StackOverflow