2017-10-14 14 views
0

Ich muss XML mithilfe einer XSLT-Datei in eine CSV-Datei konvertieren. Der XML-Code ist unten in abgekürzter Form aufgeführt. Das CSV-Format Ich suche ist hostname, generationDate, MachineIDXML-Konvertierung in CSV

Beispiel für erforderlich CSV

DESKTOP-H3B7ONO,20171014T100948Z,3A80-071084 

Ich brauche nur drei Werte aus der XML-Datei und der Rest ignoriert werden kann.

<?xml version='1.0' encoding='UTF-8' ?> 
<document> 
    <properties> 
    <basic> 
     <property id="hostName"> 
     <value>DESKTOP-H3B7ONO</value> 
     </property> 
     <property id="generationDate"> 
     <value>20171014T100948Z</value> 
     </property> 
     <property id="rotationType"> 
     <value></value> 
     </property> 
     <!-- ... many properties omitted here ... --> 
     <property id="generationEpoch"> 
     <value>1507975788796</value> 
     </property> 
     <property id="machineId"> 
     <value>3A80-071084</value> 
     </property> 
     <property id="application"> 
     <value>scan</value> 
     </property> 
     <!-- ... more properties omitted ... --> 
    </basic> 
    </properties> 
</document> 

Es gibt nur einen Datensatz in der Eingabe (das basic Element nicht wiederholt).

Ich habe das folgende Stylesheet versucht

<?xml version="1.0" encoding="Utf-8" ?> 
<xsl:stylesheet xmlns:xsl="w3.org/1999/XSL/Transform" 
       version="1.0"> 
    <xsl:output method="text" encoding="Utf-8" /> 

    <xsl:template match="basic"> 
    <xsl:for-each select="property"> 
     <xsl:value-of select="value" /> 
     <xsl:text>,</xsl:text> 
     <xsl:text></xsl:text> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+1

So brauchen Sie eine Zeile mit diesen drei Werten oder haben Sie es erwarten, dass mehrere dieser drei Elemente sein? Sind sie im letzteren Fall Geschwister oder gibt es ein neues "basic" Elternteil für jeden "Datensatz/Zeile" dieser drei Elemente, an denen Sie interessiert sind? Und was hast du probiert? Die Auswahl von Elementen mit XPath wird in jedem XPath-Lernprogramm behandelt. –

+0

Es gibt nur einen Datensatz und alles ist in der Basis, ich bin nur interessiert an diesen 3 Elementen, ich habe versucht, die unten , user3129787

+0

Hinweis zum Schließen der Wähler: Ich kann mir keine Möglichkeit vorstellen, diese Frage zu verstehen und sie nicht als aq zu verstehen Die Programmierung innerhalb der Scope-Anweisung in der Hilfe. Würdest du es bitte erklären? Die Frage beschreibt ein spezifisches Programmierproblem, das Werkzeuge (hier: XSLT als eine Programmiersprache) betrifft, die üblicherweise von Programmierern verwendet werden, und das Problem ist praktisch und beantwortbar. –

Antwort

0

Sie sind in der Nähe.

Anstelle des xsl:for-each in Ihrem Stylesheet, können Sie versuchen,

<xsl:value-of select="property[@id='hostName']/value"/> 
<xsl:text>,</xsl:text> 
<xsl:value-of select="property[@id='generationDate']/value"/> 
<xsl:text>,</xsl:text> 
<xsl:value-of select="property[@id='machineId']/value"/>