XSLT code

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • paul_0403@yahoo.com

    XSLT code

    I have the following XML file

    <?xml version="1.0" encoding="UTF-8"?>
    <CentralServerR equest>
    <RequestInfo>
    <ResponseFile Mode="Overwrite "></ResponseFile>
    <StatusFile></StatusFile>
    </RequestInfo>
    </CentralServerRe quest>

    I tried the following xslt code but can't seem to get it working.

    response_file=e :/tmp/response.xml
    status_file=d:/tmp/status.xml

    <xsl:template match="StatusFi le[. = '' ">
    <xsl:copy>
    <xsl:value-of select="$status _file"/>
    </xsl:copy>
    </xsl:template


    Can somebody show me how to insert values associated with a variable
    into the XML so the output will look like this:

    <?xml version="1.0" encoding="UTF-8"?>
    <CentralServerR equest>
    <RequestInfo>
    <ResponseFile Mode="Overwrite ">e:/tmp/response.xml</
    ResponseFile>
    <StatusFile>d :/tmp/status.xml</StatusFile>
    </RequestInfo>
    </CentralServerRe quest>


    Thanks in advance to all who answer

  • Joseph J. Kesselman

    #2
    Re: XSLT code

    In general, to "insert something into" or "remove something from" an XML
    document using XSLT:

    Start with the identity transformation. (See the XSLT Recommendation or
    any good XSLT tutorial). That handles copying everything that should
    pass through unchanged.

    Then add a template which recognizes the place where you want to do
    something different, and give it a body that Does The Right Thing at
    that point.

    Comment

    • paul_0403@yahoo.com

      #3
      Re: XSLT code

      On Jun 5, 6:26 pm, "Joseph J. Kesselman" <keshlam-nos...@comcast. net>
      wrote:
      In general, to "insert something into" or "remove something from" an XML
      document using XSLT:
      >
      Start with the identity transformation. (See the XSLT Recommendation or
      any good XSLT tutorial). That handles copying everything that should
      pass through unchanged.
      >
      Then add a template which recognizes the place where you want to do
      something different, and give it a body that Does The Right Thing at
      that point.
      Thanks for your response. I was sort of hoping you can tell me what I
      was doing wrong in my example or maybe give me a similar working
      example

      Comment

      • Martin Honnen

        #4
        Re: XSLT code

        paul_0403@yahoo .com wrote:
        Can somebody show me how to insert values associated with a variable
        into the XML so the output will look like this:
        >
        <?xml version="1.0" encoding="UTF-8"?>
        <CentralServerR equest>
        <RequestInfo>
        <ResponseFile Mode="Overwrite ">e:/tmp/response.xml</
        ResponseFile>
        <StatusFile>d :/tmp/status.xml</StatusFile>
        </RequestInfo>
        </CentralServerRe quest>
        Here is a sample stylesheet that uses the identity transformation
        template and two templates to modify the ResponseFile and StatusFile
        elements:

        <xsl:styleshe et
        xmlns:xsl="http ://www.w3.org/1999/XSL/Transform"
        version="1.0">

        <xsl:param name="response_ file" select="'e:/tmp/response.xml'"/>
        <xsl:param name="status_fi le" select="'d:/tmp/status.xml'"/>

        <xsl:template match="@* | node()">
        <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
        </xsl:template>

        <xsl:template match="Response File[not(node())]">
        <xsl:copy>
        <xsl:value-of select="$respon se_file"/>
        </xsl:copy>
        </xsl:template>

        <xsl:template match="StatusFi le[not(node())]">
        <xsl:copy>
        <xsl:value-of select="$status _file"/>
        </xsl:copy>
        </xsl:template>

        </xsl:stylesheet>

        --

        Martin Honnen

        Comment

        • paul_0403@yahoo.com

          #5
          Re: XSLT code

          On Jun 6, 9:12 am, Martin Honnen <mahotr...@yaho o.dewrote:
          paul_0...@yahoo .com wrote:
          Can somebody show me how to insert values associated with a variable
          into the XML so the output will look like this:
          >
          <?xml version="1.0" encoding="UTF-8"?>
          <CentralServerR equest>
              <RequestInfo>
                  <ResponseFile Mode="Overwrite ">e:/tmp/response.xml</
          ResponseFile>
                  <StatusFile>d :/tmp/status.xml</StatusFile>
              </RequestInfo>
          </CentralServerRe quest>
          >
          Here is a sample stylesheet that uses the identity transformation
          template and two templates to modify the ResponseFile and StatusFile
          elements:
          >
          <xsl:styleshe et
             xmlns:xsl="http ://www.w3.org/1999/XSL/Transform"
             version="1.0">
          >
             <xsl:param name="response_ file" select="'e:/tmp/response.xml'"/>
             <xsl:param name="status_fi le" select="'d:/tmp/status.xml'"/>
          >
             <xsl:template match="@* | node()">
               <xsl:copy>
                 <xsl:apply-templates select="@* | node()"/>
               </xsl:copy>
             </xsl:template>
          >
             <xsl:template match="Response File[not(node())]">
               <xsl:copy>
                 <xsl:value-of select="$respon se_file"/>
               </xsl:copy>
             </xsl:template>
          >
             <xsl:template match="StatusFi le[not(node())]">
               <xsl:copy>
                 <xsl:value-of select="$status _file"/>
               </xsl:copy>
             </xsl:template>
          >
          </xsl:stylesheet>
          >
          --
          >
                  Martin Honnen
                 http://JavaScript.FAQTs.com/
          Martin,

          The example for Statusfile works but the example for the ResponseFile
          does not work.

          Note the elments are a bit different since there is an attrtibute
          "Mode" in the ResponseFile element
          as there is no attribute in the StatusFile element.

          <?xml version="1.0" encoding="UTF-8"?>
          <CentralServerR equest>
          <RequestInfo>
          <ResponseFile Mode="Overwrite "></ResponseFile>
          <StatusFile></StatusFile>
          </RequestInfo>
          </CentralServerRe quest>


          Based on that, I am assumming the XSLT code has to look a bit
          different when doing the match? Is there some sytnax to specify the
          atttibute name in the matc?. It would be okay with matching
          "ResponseFi le Mode" and skipping the value "OverWrite" since my Mode
          can have several different
          values that I may want to ignore.

          THanks in advance for all your help!!!




          Comment

          • Martin Honnen

            #6
            Re: XSLT code

            paul_0403@yahoo .com wrote:
            > <xsl:template match="Response File[not(node())]">
            > <xsl:copy>
            > <xsl:value-of select="$respon se_file"/>
            > </xsl:copy>
            > </xsl:template>
            Note the elments are a bit different since there is an attrtibute
            "Mode" in the ResponseFile element
            as there is no attribute in the StatusFile element.
            >
            <?xml version="1.0" encoding="UTF-8"?>
            <CentralServerR equest>
            <RequestInfo>
            <ResponseFile Mode="Overwrite "></ResponseFile>
            If you want to copy the attribute use

            <xsl:template match="Response File[not(node())]">
            <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:value-of select="$respon se_file"/>
            </xsl:copy>
            </xsl:template>

            Based on that, I am assumming the XSLT code has to look a bit
            different when doing the match? Is there some sytnax to specify the
            atttibute name in the matc?. It would be okay with matching
            "ResponseFi le Mode" and skipping the value "OverWrite" since my Mode
            can have several different
            values that I may want to ignore.
            If you want to add the text if the Mode attribute exists then use

            <xsl:template match="Response File[@Mode and not(node())]">
            <xsl:copy>
            <xsl:value-of select="$respon se_file"/>
            </xsl:copy>
            </xsl:template>

            --

            Martin Honnen

            Comment

            • paul_0403@yahoo.com

              #7
              Re: XSLT code

              On Jun 6, 10:23 am, Martin Honnen <mahotr...@yaho o.dewrote:
              paul_0...@yahoo .com wrote:
                 <xsl:template match="Response File[not(node())]">
                   <xsl:copy>
                     <xsl:value-of select="$respon se_file"/>
                   </xsl:copy>
                 </xsl:template>
              Note the elments are a bit different since there is an attrtibute
              "Mode" in the ResponseFile element
              as there is no attribute in the StatusFile element.
              >
               <?xml version="1.0" encoding="UTF-8"?>
               <CentralServerR equest>
                   <RequestInfo>
                       <ResponseFile Mode="Overwrite "></ResponseFile>
              >
              If you want to copy the attribute use
              >
                 <xsl:template match="Response File[not(node())]">
                   <xsl:copy>
                     <xsl:apply-templates select="@*"/>
                     <xsl:value-of select="$respon se_file"/>
                   </xsl:copy>
                 </xsl:template>
              >
              Based on that, I am assumming the XSLT code has to look a bit
              different when doing the match? Is there some sytnax to specify the
              atttibute name in the matc?. It would be okay with matching
              "ResponseFi le Mode" and skipping the value  "OverWrite" since my Mode
              can have several different
              values that I may want to ignore.
              >
              If you want to add the text if the Mode attribute exists then use
              >
                 <xsl:template match="Response File[@Mode and not(node())]">
                   <xsl:copy>
                     <xsl:value-of select="$respon se_file"/>
                   </xsl:copy>
                 </xsl:template>
              >
              --
              >
                      Martin Honnen
                     http://JavaScript.FAQTs.com/
              Thanks I appreciate your expertise and help

              Comment

              • Martin Honnen

                #8
                Re: XSLT code

                paul_0403@yahoo .com wrote:
                >If you want to add the text if the Mode attribute exists then use
                >>
                > <xsl:template match="Response File[@Mode and not(node())]">
                > <xsl:copy>
                Depending on your needs you might also want to copy the attributes with
                <xsl:apply-templates select="@*"/>
                here.
                > <xsl:value-of select="$respon se_file"/>
                > </xsl:copy>
                > </xsl:template>

                --

                Martin Honnen

                Comment

                Working...