مطابقة التعبير داخل قسم البيانات لعنصر XML باستخدام XSL

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

سؤال

مرحبًا ، أنا عادةً ما أقوم برمجة في 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top