Adding element in middle of xml using xslt

前端 未结 2 1191
粉色の甜心
粉色の甜心 2020-12-03 04:56

Below is the actual xml:



 ABC
 CS
 

        
相关标签:
2条回答
  • 2020-12-03 05:27

    Here is an XSLT 1.0 stylesheet that will do what you asked:

    <?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>
    

    Obviously the logic will vary depending on where you will be getting the new data from, and where it needs to go. The above stylesheet merely inserts an <Age> element after every <Name> element, and a <Domain> element after every <Dept> element.

    (Limitation: if your document could have <Name> or <Dept> elements within other <Name> or <Dept> elements, only the outermost ones will have this special processing. I don't think you intend for your document to have this kind of recursive structure, so it wouldn't affect you, but it's worth mentioning just in case.)

    0 讨论(0)
  • 2020-12-03 05:32

    I have modified few things in the existing stylesheet ,it will allow you to choose the specific element and update in your 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>
    
    0 讨论(0)
提交回复
热议问题