Проблема преобразования XSLT - как заполнить атрибут - PullRequest
1 голос
/ 11 января 2010

Я использую xslt в первый раз. Я должен создать элемент на основе некоторых критериев.

вот i / p xml:

<FirstUser>
   <User id="2" description="ABC" Type="HR"/>
</FirstUser>
<SecondUser>
  <User id="3" description="ABC" Type="HR"/>
  <User id="4" description="xyz" Type="Admin"/>
  <User id="5" description="LMN" Type="Payroll"/>
</SecondUser>

Окончательный O / P

<AllUsers isFromHR='true'>
  <User id="2" description="ABC" Type="HR"/>
  <User id="3" description="ABC" Type="HR"/>
  <User id="4" description="xyz" Type="Admin"/>
  <User id="5" description="LMN" Type="Payroll"/>
</AllUsers>

Бизнес-правило: элемент AllUsers имеет 1 атрибут isFromHR - Его значение будет истинным, если значение в атрибуте типа <FirstUser> или <SecondUser> HR это будет ложно

Как заполнить значение isFromHR? Остальное создание xml закончено.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 11 января 2010

А как же

<AllUsers isFromHR="{ count((//FirstUser | //SecondUser)[@type='HR']) &gt; 0 }">

или

<AllUsers>
    <xsl:attribute 
         name="isFromHR"
         value="count((//FirstUser | //SecondUser)[@type='HR']) &gt; 0" />
0 голосов
/ 11 января 2010

Во входном XML отсутствуют элементы:

<FirstUser>
   <User id="2" description="ABC" Type="HqR"/>
</FirstUser>
<SecondUser>
  <User id="3" description="ABC" Type="H2R"/>
  <User id="4" description="xyz" Type="Admin"/>
  <User id="5" description="LMN" Type="Payroll"/>
</SecondUser>

В любом случае, я бы пошел на:

<AllUsers isFromHR="{//FirstUser/User/@Type = 'HR' or //SecondUser/User/@Type = 'HR'}">

Это дает "true" в случае, если FirstUser или SecondUser содержат пользователя типа 'HR'.

0 голосов
/ 11 января 2010
<AllUsers isFromHR="{descendant::@type = 'HR'}">
0 голосов
/ 11 января 2010
  <xsl:template match="/">
    <AllUsers>
      <xsl:attribute name="isFromHR">
        <xsl:choose>
            <xsl:when test="//*[local-name(.)='FirstUser' or local-name(.)='SecondUser']/*/@Type[.='HR']">true</xsl:when>
        <xsl:otherwise>false</xsl:otherwise>
      </xsl:choose>
        </xsl:attribute>
      <xsl:apply-templates />
    </AllUsers >
  </xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...