2016-08-19 7 views
0

ich eine Textdatei haben, die String-Werte enthält:Konvertieren von Text in XML-Dokument

January 
February 
March 

Ich mag würde diese Zeichenfolgen aus einer Textdatei extrahieren und in einem XML-Dokument hinzufügen, finden Sie unter:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
<suite name="Suite" parallel="none">  
    <test name="Test" preserve-order="true">  
     <classes> 
      <class name="January"/> 
      <class name="February"/> 
      <class name="March"/> 
     </classes> 
    </test> 
</suite> 

Ich bin mir nicht sicher, welcher Prozess implementiert werden sollte, um das obige Ergebnis zu erhalten, bitte helfen Sie?

Antwort

1

XSLT Verwenden von 3,0 (nach Verfügbarkeit mit Saxon 9.7 PE und EE) oder mit Exselt könnten Sie

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:math="http://www.w3.org/2005/xpath-functions/math" 
    exclude-result-prefixes="xs math" 
    version="3.0"> 

    <xsl:output method="xml" doctype-system="http://testng.org/testng-1.0.dtd" indent="yes"/> 

    <xsl:template name="main"> 
     <suite name="Suite" parallel="none">  
      <test name="Test" preserve-order="true">  
       <classes> 
        <xsl:apply-templates select="unparsed-text-lines('input.txt')"/> 
       </classes> 
      </test> 
     </suite>   
    </xsl:template> 

    <xsl:template match=".[. instance of xs:string]"> 
     <class name="{normalize-space()}"/> 
    </xsl:template> 
</xsl:stylesheet> 

XSLT Unter Verwendung von 2,0 als auch mit Saxon 9 oder XmlPrime oder Altova verwenden, können Sie verwenden

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 

    <xsl:output method="xml" doctype-system="http://testng.org/testng-1.0.dtd" indent="yes"/> 

    <xsl:template name="main"> 
     <suite name="Suite" parallel="none">  
      <test name="Test" preserve-order="true">  
       <classes> 
        <xsl:for-each select="tokenize(unparsed-text('input.txt'), '\r?\n')"> 
         <class name="{normalize-space()}"/> 
        </xsl:for-each> 
       </classes> 
      </test> 
     </suite>   
    </xsl:template> 

</xsl:stylesheet> 
+0

, wenn ich diese XSL-Transformation in Eclipse ausgeführt werden. Ich erhalte den folgenden Fehler: FATAL [main] Main - Keine eingebettete Stylesheet-Anweisung für die Datei: file:/C: /xlstexample1/stylesheet.xml. – adz

+0

Wie gesagt, die Stylesheets sind XSLT 2.0 bzw. 3.0, also müssen Sie Saxon 9 verwenden, um sie auszuführen, und stellen Sie sicher, dass Sie die ursprüngliche Vorlage auf den Namen 'main' festgelegt haben. –

+0

Aus meiner Sicht sollte main.xml eine leere Datei sein? welche wird von XSLT-Transformationsdatei aufgefüllt? – adz

-1

Wenn ich dich verstanden habe, ändern sich nur die Namen der Klassen.

Ich habe ein einfaches Skript erstellt, das alle Zeichenfolgen mit Komma aufteilt und separate Klassen erstellt.

Sie müssen nur den Text des Dokuments kopieren und es zu einer neuen Variablen hinzufügen und das Skript wird den Rest erledigen.

<script> 
 
var text = "example variable with some text"; 
 
var partsOfStr = text.split(' '); 
 
for(i=0; i<partsOfStr.length; i++){ 
 
\t document.write("&lt;class name=&quot;"+partsOfStr[i]+"&quot;/&gt;<br>"); 
 
} 
 
</script>

+0

Ich befürchte, dass dieser Code den klassischen Fehler aufweist, wenn Sie versuchen, XML "von Hand" zu schreiben: Sie vergessen, Sonderzeichen wie Anführungszeichen, spitzen Klammern und Et-Zeichen zu entgehen. Eine große Anzahl von StackOverflow-Fragen wird von Benutzern gesendet, die schlechtes XML erhalten haben, das durch unvorsichtigen Code wie diesem erstellt wurde. –