2016-07-19 1 views
0

У меня есть следующий XML, который содержит все элементы в нижнем регистре.Преобразование элементов XML от нижнего регистра в верхний регистр с использованием XSLT в JAVA

<data> 
    <employee> 
     <id>2784</id> 
     <employeeFirstName></employeeFirstName> 
     <employeeLastName nil="true"/></employeeLastName> 
    </employee> 
</data> 

Здесь мое требование состоит в том, чтобы преобразовать все элементы в верхний регистр.

<DATA> 
     <EMPLOYEE> 
      <ID>2784</ID> 
      <EMPLOYEEFIRSTNAME></EMPLOYEEFIRSTNAME> 
      <EMPLOYEELASTNAME nil="true"/></EMPLOYEELASTNAME> 
     </EMPLOYEE> 
</DATA> 

Любой, пожалуйста, помогите мне преобразовать этот xml с помощью XSLT.

+0

Пожалуйста, выберите или XSLT 1,0 или 2,0, а не как - делает ** большой ** разница в этом случае. - Кроме того, я считаю, что это не первый вопрос о преобразовании дела - почему бы вам не выполнить поиск. –

+0

@JayP. Ваш вход также плохо сформирован. Проверьте элемент 'employeeLastName' – nawazlj

+0

@ michael.hor257k Я новичок в XSLT. Я потратил 2 часа на поиск в Интернете, но я не мог найти ожидаемого ответа. Именно по этой причине я задал этот вопрос на этом форуме. – JayP

ответ

1

В XSLT 2.0, это довольно тривиально:

<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:strip-space elements="*"/> 

<xsl:template match="*"> 
    <xsl:element name="{upper-case(name())}"> 
     <xsl:copy-of select="@*"/> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet> 
0

Простейший способ сделать в XSLT 1,0

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XS/Transform" version="1.0"> 
 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
 
    <xsl:strip-space elements="*"/> 
 
    <xsl:template match="node()|@*"> 
 
     <xsl:copy> 
 
      <xsl:apply-templates select="node()|@*"/> 
 
     </xsl:copy> 
 
    </xsl:template> 
 
    <xsl:template match="*"> 
 
     <xsl:element name="{ 
 
      translate(name(.), 
 
      'abcdefghijklmnopqrstuvwxyz', 
 
      'ABCDEFGHIJKLMNOPQRSTUVWXYZ')}"> 
 
      <xsl:apply-templates select="node()|@*"/> 
 
     </xsl:element> 
 
    </xsl:template> 
 
</xsl:stylesheet>

Он будет производить ниже выход

<DATA> 
 
    <EMPLOYEE> 
 
     <ID>2784</ID> 
 
     <EMPLOYEEFIRSTNAME/> 
 
     <EMPLOYEELASTNAME nil="true"/> 
 
    </EMPLOYEE> 
 
</DATA>

+0

** 1. ** Это не работает, потому что у вас есть опечатка в пространстве имен xsl. - ** 2. ** Что еще более важно, у вас есть два шаблона, соответствующие тем же узлам с одним и тем же приоритетом, поэтому результат может быть любым, в зависимости от прихоти процессора. –

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

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