वर्तमान एक्सएमएल जैसा दिखता है

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<document>
    <attribute>
        <name>Attr1</name>
        <value>Attr1 Value 1</value>
    </attribute>
    <attribute>
        <name>Attr2</name>
        <value>Attr 2 Value 1</value>
        <value>Attr 2 Value 2</value>
    </attribute>
</document>

मैं चाहता हूं कि नया एक्सएमएल निम्नलिखित जैसा दिखे ....

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <document>
        <Attr1>           
            <value>Attr1 Value 1</value>
        </Attr1>
        <Attr2>
            <value>Attr 2 Value 1</value>
            <value>Attr 2 Value 2</value>
        </Attr2>
    </document>

मैं इस परिवर्तन को करने के लिए xslt का उपयोग करना चाहता हूं ... मेरा xslt काम नहीं करता है

0
MarketMario 9 पद 2020, 07:44

2 जवाब

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

यहाँ समाधान है:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

  <xsl:template match="/document">
    <document>
      <xsl:apply-templates />
    </document>
  </xsl:template>

  <xsl:template match="/document/attribute">
    <xsl:element name="{name}">
      <xsl:copy-of select="value" />
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

इसकी मुख्य कठिनाई यह है कि आपको एक गतिशील नाम के साथ एक तत्व बनाने की आवश्यकता है। यही <xsl:element name="{name}"> के लिए है। आप ब्रेसिज़ के बीच कोई xpath व्यंजक रख सकते हैं। यहां हम /document/attribute मैच का (उम्मीद के मुताबिक अद्वितीय) नाम नोड चाहते थे।

0
Fabian Pijcke 9 पद 2020, 10:48

मैंने उपरोक्त मुद्दे को संभालने के लिए एक अलग तरीके का इस्तेमाल किया ...

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" />
    <xsl:strip-space elements="*" />

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="attribute">
        <xsl:element name="{name}">
            <xsl:apply-templates select="node()|@*"/>           
        </xsl:element>          
    </xsl:template>
    
    <xsl:template match="name"/>    
</xsl:stylesheet>
0
MarketMario 4 जिंदा 2021, 04:12