Подтвердить что ты не робот

Добавление элемента в середине xml с помощью xslt

Ниже представлен фактический xml:

<?xml version="1.0" encoding="utf-8"?>
<employee>
 <Name>ABC</Name>
 <Dept>CS</Dept>
 <Designation>sse</Designation>
</employee>

И я хочу, чтобы результат был следующим:

<?xml version="1.0" encoding="utf-8"?>
<employee>
 <Name>ABC</Name>
  <Age>34</Age>
 <Dept>CS</Dept>
  <Domain>Insurance</Domain>
 <Designation>sse</Designation>
</employee>

Возможно ли добавить XML-элемент между использованием xslt? Пожалуйста, дайте мне образец!

4b9b3361

Ответ 1

Вот таблица стилей XSLT 1.0, которая будет делать то, что вы спросили:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <!-- Identity transform -->
   <xsl:template match="@* | node()">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="Name">
      <xsl:copy-of select="."/>
      <Age>34</Age>
   </xsl:template>

   <xsl:template match="Dept">
      <xsl:copy-of select="."/>
      <Domain>Insurance</Domain>
   </xsl:template>
</xsl:stylesheet>

Очевидно, что логика будет варьироваться в зависимости от того, откуда вы будете получать новые данные, и где она должна идти. Вышеупомянутая таблица стилей просто добавляет элемент <Age> после каждого элемента <Name> и элемент <Domain> после каждого элемента <Dept>.

(Ограничение: если ваш документ может иметь элементы <Name> или <Dept> в других элементах <Name> или <Dept>, только самые внешние из них будут иметь эту специальную обработку. Я не думаю, что вы намерены использовать свой документ иметь такую ​​рекурсивную структуру, чтобы она не повлияла на вас, но на всякий случай стоит упомянуть.)

Ответ 2

Я изменил несколько вещей в существующей таблице стилей, это позволит вам выбрать конкретный элемент и обновить его в xml.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <!-- Identity transform -->
   <xsl:template match="@* | node()">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="Name[1]">
      <xsl:copy-of select="."/>
      <Age>34</Age>
   </xsl:template>

   <xsl:template match="Dept[1]">
      <xsl:copy-of select="."/>
      <Domain>Insurance</Domain>
   </xsl:template>
</xsl:stylesheet>

XML:

<?xml version="1.0" encoding="utf-8"?>
<employee>
 <Name>ABC</Name>
 <Dept>CS</Dept>
 <Designation>sse</Designation>
 <Name>CDE</Name>
 <Dept>CSE</Dept>
 <Designation>sses</Designation>
</employee>