मैं एक्सएसएल के साथ एक्सएमएल को बदलने की कोशिश कर रहा हूं लेकिन मुझे नहीं पता कि यह क्या गलत है। गंतव्य XML में फ़ील्ड को अलग नाम दिया गया है और संरचना भी थोड़ी भिन्न है। इसके अलावा .. अगर मैं एक अनुरोध प्राप्त करता हूं और मुझे नीचे एक्सएमएल प्राप्त होता है तो इसे एडचेंज एक्शन के साथ एक्सएमएल में बदलना संभव है?

<?xml version="1.0" encoding="UTF-8"?>
<RegisterSearch TotalResults="149">
<SearchResults>
  <Document DocumentId="xxxxxxxxxxxxx">
     <DocumentNumber>yyyyyyyyyyyyyyyy</DocumentNumber>
     <Title>Test Title</Title>
  </Document>
</SearchResults>
</RegisterSearch>

मेरी एक्सएसएल फाइल है:

<?xml version="1.0"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XMLSchema-instance">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
 <xsl:apply-templates select="SearchResults"/>
</xsl:template> 
<xsl:template match="SearchResults">
 <xsl:apply-templates select="Document"/>
</xsl:template> 


<xsl:template match="Document">

        <Ext_DB_STG class="R"> 

            <xsl:apply-templates select="mro:SITEID"/>
            <xsl:apply-templates select="mro:TASKID"/>
            <xsl:apply-templates select="mro:WONUM"/>

        </Ext_DB_STG>

 </xsl:template> 
 <!-- <xsl:template match="WORKORDER.> --> 

<xsl:template match="mro:SITEID">
 <DocumentId><xsl:value-of select="."/></DocumentId>
 </xsl:template> 


<xsl:template match="mro:TASKID">
 <DocumentNumber><xsl:value-of select="."/></DocumentNumber>
 </xsl:template> 


<xsl:template match="mro:WONUM">
     <Title><xsl:value-of select="."/></Title>
    </xsl:template> 

    </xsl:stylesheet> 

मैं क्या गलत कर रहा हूं?

परिणाम एक्सएमएल मैं इस तरह बनना चाहता हूँ:

<?xml version="1.0" encoding="UTF-8"?>
<MXITEMIN xmlns="http://www.mro.com/mx/integration" language="EN">
    <Header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     operation="Notify" event="1">
        <SenderID type="MAXIMO" majorversion="6" minorversion="0" build="02" dbbuild="V600-76">EXTSYS1</SenderID>
        <CreationDateTime>2005-08-15T14:28:06-05:00</CreationDateTime>
        <RecipientID>MX</RecipientID>
        <MessageID>11241304878859947</MessageID>
    </Header>
    <Content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <MXITEM>
            <ITEM action="AddChange">
                <SITEID>001TEST</SITEID>
                <TASKID>test item</TASKID>
                <WONUM>1</WONUM>

            </ITEM>
        </MXITEM>
    </Content>
</MXITEMIN>
0
Mircea 29 जिंदा 2020, 14:28

1 उत्तर

सबसे बढ़िया उत्तर

इनपुट एक्सएमएल के कुछ हिस्सों को बदलने के लिए आप निम्नलिखित एक्सएसएलटी-1.0 कोड का उपयोग कर सकते हैं:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mro="http://www.mro.com/mx/integration">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/">
        <xsl:element name="MXITEMIN" namespace="http://www.mro.com/mx/integration">
            <xsl:attribute name="language">EN</xsl:attribute>
            <xsl:apply-templates select="RegisterSearch/SearchResults"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="SearchResults">
        <xsl:element name="Header" namespace="http://www.mro.com/mx/integration">
            <xsl:attribute name="operation">Notify</xsl:attribute>
            <xsl:attribute name="event">1</xsl:attribute>
            <xsl:element name="SenderID" namespace="http://www.mro.com/mx/integration">
                <xsl:attribute name="type">MAXIMO</xsl:attribute>
                <xsl:attribute name="majorversion">6</xsl:attribute>
                <xsl:attribute name="minorversion">0</xsl:attribute>
                <xsl:attribute name="build">02</xsl:attribute>
                <xsl:attribute name="dbbuild">V600-76</xsl:attribute>
            </xsl:element>
            <xsl:element name="CreationDateTime" namespace="http://www.mro.com/mx/integration">2005-08-15T14:28:06-05:00</xsl:element>
            <xsl:element name="RecipientID" namespace="http://www.mro.com/mx/integration">MX</xsl:element>
            <xsl:element name="MessageID" namespace="http://www.mro.com/mx/integration">11241304878859947</xsl:element>
        </xsl:element>
        <xsl:apply-templates select="Document"/>
    </xsl:template>

    <xsl:template match="Document">
        <Content xmlns="http://www.mro.com/mx/integration">
            <MXITEM>
                <ITEM action="AddChange">
                    <SITEID><xsl:value-of select="..."/></SITEID>
                    <TASKID><xsl:value-of select="..."/></TASKID>
                    <WONUM><xsl:value-of select="..."/></WONUM>
                </ITEM>
            </MXITEM>
        </Content>
    </xsl:template>   

</xsl:stylesheet>

इसका आउटपुट है:

<?xml version="1.0" encoding="UTF-8"?>
<MXITEMIN xmlns="http://www.mro.com/mx/integration" language="EN">
  <Header operation="Notify" event="1">
    <SenderID type="MAXIMO" majorversion="6" minorversion="0" build="02" dbbuild="V600-76"/>
    <CreationDateTime>2005-08-15T14:28:06-05:00</CreationDateTime>
    <RecipientID>MX</RecipientID>
    <MessageID>11241304878859947</MessageID>
  </Header>
  <Content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mro="http://www.mro.com/mx/integration">
    <MXITEM>
      <ITEM action="AddChange">
        <SITEID/>
        <TASKID/>
        <WONUM/>
      </ITEM>
    </MXITEM>
  </Content>
</MXITEMIN>

इसलिए आपको अपने इच्छित मानों का चयन करने के लिए xsl:value-of "..." अभिव्यक्तियों को समायोजित करना होगा (जो इनपुट एक्सएमएल में मौजूद नहीं हैं)। नामस्थान अधिकतर सही हैं, लेकिन मुझे लगता है कि आपको उन्हें समायोजित करना होगा।

0
zx485 30 जिंदा 2020, 02:58