Добавление элемента в середине xml с помощью xslt - PullRequest
23 голосов
/ 06 сентября 2010

Ниже приведен фактический 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?Пожалуйста, дайте мне образец!

Ответы [ 2 ]

35 голосов
/ 06 сентября 2010

Вот таблица стилей 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 голосов
/ 06 сентября 2016

Я изменил несколько вещей в существующей таблице стилей, это позволит вам выбрать определенный элемент и обновить его в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...