2013-09-23 4 views
0

Я пытаюсь преобразовать атрибуты субэлементов, то есть включить следующее:Transform атрибуты субэлементов с помощью XSLT

<employees companyid="101"> 
    <record> 
     <id>1</id> 
     <name>pradeep</name> 
     <designation>softeng</designation> 
    </record> 
    <record> 
     <id>2</id> 
     <name>som</name> 
     <designation>softeng</designation> 
    </record> 
    <record> 
     <id>3</id> 
     <name>Javed</name> 
     <designation>softeng</designation> 
    </record> 
</employees> 

Я хочу, чтобы преобразовать таким образом

<employees> 
    <record> 

     <id>1</id> 
     <name>pradeep</name> 
     <designation>softeng</designation> 
    </record> 
    <record> 
     <id>2</id> 
     <name>som</name> 
     <designation>softeng</designation> 
    </record> 
    <record> 
     <id>3</id> 
     <name>Javed</name> 
     <designation>softeng</designation> 
    </record> 
</employees> 

Это не работает. Какие-либо предложения?

+5

Итак, мы должны определить различия между ними? Я получу шоколад, если найду их все? – ppeterka

+1

Поделитесь своими впечатлениями. Два применимых критерия закрытия для этого вопроса гласят: «Вопросы, связанные с проблемами с написанным кодом, должны описывать конкретную проблему - и включать в себя действительный код для ее воспроизведения - в самом вопросе. См. SSCCE.org для руководства». и «Вопросы, требующие кода, должны продемонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не работают и ожидаемые результаты. См. также: Контрольный список вопросов переполнения стека« – Marcin

+0

Является ли ваш ожидаемый результат правильным, путь? В вашем примере ввода есть атрибут «companyid», но он не отображается в вашем представлении. Когда вы упоминаете об повороте атрибутов в подэлементы, это говорит о том, что что-то прошло. Благодаря! –

ответ

0

Я ожидаю, что вам понадобится элемент <companyid> на каждом уровне <record>. Вы можете использовать следующее:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.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="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="record"> 
     <xsl:copy> 
      <companyid><xsl:value-of select="ancestor::employees/@companyid"/></companyid> 
      <xsl:apply-templates /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Если вы хотите, чтобы он появится на первом <record> элемента можно изменить <xsl:template match="record"> к <xsl:template match="record[1]">

0
<?xml version="1.0" encoding="UTF-8"?>  
<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="/"> 
     <employees> 
      <xsl:copy-of select="employees/*"/> 
     </employees> 
    </xsl:template> 
</xsl:stylesheet> 

Предполагая, что ваш вывод является правильным, и что вы хотите только для удаления атрибута companyid.

+0

Мы все можем догадаться, что он хочет, потому что результат не корректный, но он говорит «просто пытается преобразовать атрибуты в подэлементы», –

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