XSLT सहायता का उपयोग करने के लिए XML सीएसवी




csv (2)

मेरा मानना ​​है कि आपको इस समस्या का समाधान करने के लिए पुनरावर्ती समाधान की आवश्यकता है इसलिए, आपको किसी चीज की आवश्यकता होती है जो पेड़ में डाइविंग रखता है जब तक कि वह पाठ () नोड तक नहीं पहुंचता है यदि वह पाठ () नोड वास्तव में अंतिम नोड का बच्चा है, तो यह एक नई लाइन डालता है अन्यथा, यह केवल एक अल्पविराम के साथ मूल्य डालता है

अगर नोड में उसके बच्चे के रूप में नोड (पाठ) नहीं है, तो उस पेड़ में फिर से दोबारा खोना शुरू हो जाता है

<xsl:strip-space elements="*" />    

<xsl:template name="rec">        
    <xsl:param name="node"/>        
    <xsl:for-each select="child::*">
        <xsl:choose>
            <xsl:when test="child::text()">
                <xsl:choose>                        
                    <xsl:when test="local-name(.) != 'UpdatedDate'">"<xsl:value-of select="normalize-space(.)"/>", </xsl:when>
                    <xsl:otherwise>"<xsl:value-of select="normalize-space(.)"/>" <xsl:text>&#xD;</xsl:text></xsl:otherwise>
                </xsl:choose>                    
            </xsl:when>
            <xsl:when test="child::node()">
                <xsl:call-template name="rec">
                    <xsl:with-param name="node" select="child::node()"/>
                </xsl:call-template>                    
            </xsl:when>
        </xsl:choose>

    </xsl:for-each>
</xsl:template>

यह सबूत बेवकूफ़ नहीं है, लेकिन सक्सोन के साथ मेरे अंत में इस परिणाम का उत्पादन किया:

"127.0.0.1", "[email protected]", "Internet Corporation for Assigned Names and Number", "+1-310-301-5820", "...", "4676 Admiralty Way, Suite 330", "Marina del Rey", "US", "Internet Assigned Numbers Authority", "90292-6695", "CA", "[email protected]", "Internet Corporation for Assigned Names and Number", "+1-310-301-5820", "2010-04-14"

उम्मीद है की यह मदद करेगा।

मैं एक्सएसएल को एक्सएसएलटी का उपयोग करके सीएसवी में बदलना चाहता हूं, लेकिन जब एक्सएसएल को मेरे इनपुट के विरुद्ध सीएसएसवी एक्सएसएलटी के नाम से एसओ धागा से लागू किया जाता है:

<WhoisRecord>
  <DomainName>127.0.0.1</DomainName>
  <RegistryData>
    <AbuseContact>
      <Email>[email protected]</Email>
      <Name>Internet Corporation for Assigned Names and Number</Name>
      <Phone>+1-310-301-5820</Phone>
    </AbuseContact>
    <AdministrativeContact i:nil="true"/>
    <BillingContact i:nil="true"/>
    <CreatedDate/>
    <RawText>...</RawText>
    <Registrant>
      <Address>4676 Admiralty Way, Suite 330</Address>
      <City>Marina del Rey</City>
      <Country>US</Country>
      <Name>Internet Assigned Numbers Authority</Name>
      <PostalCode>90292-6695</PostalCode>
      <StateProv>CA</StateProv>
    </Registrant>
    <TechnicalContact>
      <Email>[email protected]</Email>
      <Name>Internet Corporation for Assigned Names and Number</Name>
      <Phone>+1-310-301-5820</Phone>
    </TechnicalContact>
    <UpdatedDate>2010-04-14</UpdatedDate>
    <ZoneContact i:nil="true"/>
  </RegistryData>
</WhoisRecord>

मैं अंत के साथ:

  [email protected] Corporation for Assigned Names and Number+1-310-301-5820,
    ,
    ,
    ,
    ...,      
    4676 Admiralty Way, Suite 330Marina del ReyUSInternet Assigned Numbers Authority90292-6695CA,      
    [email protected] Corporation for Assigned Names and Number+1-310-301-5820,      
    2010-04-14,

मेरी समस्या यह है कि, परिणामस्वरूप परिवर्तन नोड्स (जैसे आईपी पते वाले डोमेननाम तत्व) और कुछ बच्चे नोड्स को बिना अल्पविराम (जैसे एब्यूस कंटैक्टक्ट के बच्चों) के रूप में जोड़ा जाता है।

मैं सीएसवी फॉर्म में सभी एक्सएमएल आउटपुट देखना चाहता हूं, और जैसे स्ट्रिंग्स: "[email protected] Corporation असाइन किए गए नाम और नंबर + 1-310-301-5820," अल्पविराम द्वारा सीमांकित

मेरा एक्सएसएल बहुत कड़ा हुआ है आपकी मदद की सराहना की है। :)

यहां एक्सएसएल का उपयोग कर रहा हूं I

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>

<xsl:strip-space elements="*" />

<xsl:template match="/*/child::*">
  <xsl:for-each select="child::*">
    <xsl:if test="position() != last()"><xsl:value-of select="normalize-space(.)"/>,    </xsl:if>
    <xsl:if test="position()  = last()"><xsl:value-of select="normalize-space(.)"/><xsl:text>
</xsl:text>
  </xsl:if>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

यह सरल परिवर्तन वांछित परिणाम उत्पन्न करता है :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

    <xsl:template match="/">
    <xsl:apply-templates select="//text()"/>
    </xsl:template>

    <xsl:template match="text()">
      <xsl:copy-of select="."/>
      <xsl:if test="not(position()=last())">,</xsl:if>
    </xsl:template>
</xsl:stylesheet>

इसका उपयोग ध्यान रखें :

 <xsl:strip-space elements="*"/>

किसी भी सफेद स्पेस-केवल पाठ नोड को त्यागने के लिए

अपडेट : ए जे ने इस समस्या को उठाया है कि परिणामों को प्रति पंक्ति / ट्यूपल्स में समूहीकृत किया जाता है यह प्रश्न में परिभाषित नहीं किया जाता है कि रिकॉर्ड / ट्यूपल होना कितना होना चाहिए। इसलिए वर्तमान समाधान सफेद-अंतरिक्ष-केवल पाठ नोड्स और गुम अल्पविराम की दो समस्याओं का निराकरण करता है, लेकिन अभिलेखों / ट्यूपल्स में आउटपुट को विकसित करने का उद्देश्य नहीं है।





csv