Как преобразовать один XML-файл в другой с помощью XSLT?

#xml #xslt #xslt-1.0

#xml #xslt #xslt-1.0

Вопрос:

Как преобразовать этот XML-файл:

 <file>
  <text ID="201" date="2014-05-04">
    <user_name>user_11</user_name>
    <message> HELLO </message>
  </text>
</file>
  

в этот XML-файл с помощью XSLT 1.0:

 <doc>
  <user name="user_11">
    <text id="201" date="2014-05-04"> HELLO </text> 
  </user>
</doc>
  

Также, если у вас есть какие-либо ресурсы по этому вопросу, пожалуйста, опубликуйте, потому что у меня гораздо больше файлов XSLT для кода. Спасибо

Комментарии:

1. Я откатил ваш вопрос к его первоначальной форме, иначе ответы не имеют смысла.

Ответ №1:

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

<xsl:template match="/">
    <doc>
        <xsl:for-each select="file/text">
            <user name="{user_name}">
                <text id="{@ID}" date="{@date}">
                    <xsl:value-of select="message" />
                </text> 
            </user>
        </xsl:for-each>
    </doc>
</xsl:template>

</xsl:stylesheet>
  

Ответ №2:

Я предполагаю, что у вас есть контейнер files в вашем XML , в любом случае вы ищете что-то вроде этого:

 <?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <docs>
    <xsl:for-each select="files/file">
      <xsl:element name="doc">
        <xsl:element name="text">
         <xsl:attribute name="name">
          <xsl:value-of select="text/user_name" />
         </xsl:attribute>  
          <xsl:element name="text">
           <xsl:attribute name="id">
            <xsl:value-of select="text/@ID" />
           </xsl:attribute> 
           <xsl:attribute name="date">
            <xsl:value-of select="text/@date" />
           </xsl:attribute> 
           <xsl:value-of select="text/message" />
          </xsl:element>
        </xsl:element>      
      </xsl:element>       
    </xsl:for-each>
  </docs>
</xsl:template>
</xsl:stylesheet>
  

Комментарии:

1. XSLT является подробным, но он не должен быть таким подробным. Вы можете выводить литеральные элементы, записывая их непосредственно в результирующее дерево, и вы можете использовать шаблон значения атрибута для сокращения вашего кода. w3.org/TR/xslt/#section-Creating-Elements-and-Attributes

2. @michael.hor257k пожалуйста, опубликуйте свой ответ, я хотел бы узнать, что вы намерены