xsl для извлечения других значений атрибута и добавления значений в один атрибут - PullRequest
3 голосов
/ 15 августа 2011

Для начала:

<test style="font:2px;color:#FFFFFF" bgcolor="#CCCCCC" TOPMARGIN="5">style</test>

Используя XSLT / XPATH, я копирую все из моего документа

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

Но я не уверен, как получить этот результат, используя XSLT / XPATH:

<test style="background-color:#CCCCCC; margin-top:1;font:2px;color:#FFFFFF">style</test>

Мне кажется, я проваливаюсь на XPATH. Это моя попытка просто получить bgColor:

<xsl:template match="@bgColor">
 <xsl:attribute name="style">
   <xsl:text>background-color:</xsl:text>
   <xsl:value-of select="."/>
   <xsl:text>;</xsl:text>
   <xsl:value-of select="../@style"/>
 </xsl:attribute>
</xsl:template>

К сожалению, даже это нарушается, когда стиль помещается после bgColor в исходном документе. Как добавить эти устаревшие значения атрибута в один встроенный атрибут стиля?

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/*">
  <test style="{@style};background-color:{@bgcolor};margin-top:{@TOPMARGIN}">
   <xsl:value-of select="."/>
  </test>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному XML-документу :

<test style="font:2px;color:#FFFFFF"
      bgcolor="#CCCCCC" TOPMARGIN="5">style</test>

производит иск, правильный результат :

<test style="font:2px;color:#FFFFFF;background-color:#CCCCCC;margin-top:5">style</test>

Пояснение : Использование AVT .

0 голосов
/ 15 августа 2011

Может быть не лучшим образом, но это работает:

<xsl:template match="test">
    <xsl:element name="{name()}">
        <xsl:apply-templates select="@*[name() != 'bgcolor']"/>   
    </xsl:element>
</xsl:template>    

<xsl:template match="@*">
    <xsl:copy/>
</xsl:template>

<xsl:template match="@style">
    <xsl:attribute name="style">
        <xsl:value-of select="."/>
        <xsl:text>;background-color:</xsl:text>
        <xsl:value-of select="../@bgcolor"/>
    </xsl:attribute>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...