2017-01-20 12 views
0

Попытка получить значения атрибутов внутри элемента, используя for-each в xslt. Может кто-нибудь помочь, чтобы получить желаемый результат, как, я получаю только имя = «ID» и введите = «строка» для всех <property name="id" type="string"/>Xslt - для каждого не создавая желаемые атрибуты внутри элемента

Входной Xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <ns2:Example xmlns:ns2="http://example.com/internal"> 
     <inspection-result version="1"> 
      <form title="Form 1" history="true"> 
       <property name="id" type="string"/> 
       <property name="name" type="string"/> 
       <property name="default" type="string"/> 
       <property name="time" type="string"/> 
       <property name="status" type="string"/> 
       <action name="click"/> 
      </form> 
      <next>Form2</next> 
     </inspection-result> 
    </ns2:Example> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns2="http://example.com/internal" 
exclude-result-prefixes="ns2"> 
<xsl:template match="inspection-result"> 
    <inspection-result> 
    <xsl:attribute name="version"><xsl:value-of select="//inspection-result/@version"/></xsl:attribute> 
    <form> 
    <xsl:attribute name="title"><xsl:value-of select="//form/@title" /></xsl:attribute> 
    <xsl:attribute name="history"><xsl:value-of select="//form/@history" /></xsl:attribute> 
    <xsl:for-each select="//form/property"> 
    <property> 
     <xsl:attribute name="name"><xsl:value-of select="//form/property/@name" /></xsl:attribute> 
     <xsl:attribute name="type"><xsl:value-of select="//form/property/@type" /></xsl:attribute> 
    </property> 
    </xsl:for-each> 

    <action> 
    <xsl:attribute name="name"><xsl:value-of select="//action/@name" /></xsl:attribute> 
    </action> 
    </form> 
    <next> 
    <xsl:value-of select="//next" /> 
    </next> 
    </inspection-result> 
</xsl:template> 
</xsl:stylesheet> 

Ожидаемый выход:

<inspection-result version="1"> 
     <form title="Form 1" history="true"> 
      <property name="id" type="string"/> 
      <property name="printerName" type="string"/> 
      <property name="default" type="string"/> 
      <property name="createdTimeStamp" type="string"/> 
      <property name="status" type="string"/> 
      <action name="click"/> 
     </form> 
     <next>Form2</next> 
    </inspection-result> 

ответ

0

Поскольку вы уже я п контекст form, вам нужно использовать относительный пути к его дочерним элементам, например:

<xsl:value-of select="@name" /> 

То, что вы сейчас находитесь:

<xsl:value-of select="//form/property/@name" /> 

является абсолютным пути, который выбирает все@name атрибуты во всем документе, начиная с корня. А в XSLT 1.0 команда xsl:value-of возвращает только значение первого узла в выбранном наборе узлов.

Вы злоупотребляете выражениями // в других местах. Я хотел бы предложить вам переписать шаблон, как:

<xsl:template match="inspection-result"> 
    <inspection-result> 
     <xsl:attribute name="version"> 
      <xsl:value-of select="@version"/> 
     </xsl:attribute> 
     <form> 
     <xsl:attribute name="title"> 
      <xsl:value-of select="form/@title" /> 
     </xsl:attribute> 
     <xsl:attribute name="history"> 
      <xsl:value-of select="form/@history" /> 
     </xsl:attribute> 
     <xsl:for-each select="form/property"> 
      <property> 
       <xsl:attribute name="name"> 
        <xsl:value-of select="@name" /> 
       </xsl:attribute> 
       <xsl:attribute name="type"> 
        <xsl:value-of select="@type" /> 
       </xsl:attribute> 
      </property> 
     </xsl:for-each> 
     <action> 
      <xsl:attribute name="name"> 
       <xsl:value-of select="@name" /> 
      </xsl:attribute> 
     </action> 
     </form> 
      <next> 
       <xsl:value-of select="next" /> 
      </next> 
    </inspection-result> 
</xsl:template> 
+0

спасибо lot..couldn't ответ сразу, был wokring, чтобы получить поток для моей службы закончил с использованием this..still пытается полностью узнать :) XSLT – Ranjan

 Смежные вопросы

  • Нет связанных вопросов^_^