2017-10-14 218 views
0

我需要使用XSLT文件將某些XML轉換爲CSV文件。 XML代碼以下面的縮寫形式列出。 CSV格式我正在尋找的是 主機名,generationDate,設備ID所需的CSVXML轉換爲CSV

DESKTOP-H3B7ONO,20171014T100948Z,3A80-071084 

例子,我只需要從XML文件3個值,其餘的可以忽略不計。

<?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> 

輸入中只有一條記錄(basic元素不重複)。

我曾嘗試以下樣式表

<?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

那麼你需要這三個值中的一個行還是你認爲會有幾個這三個要素的?在後一種情況下,他們是兄弟姐妹還是對於你感興趣的三個元素的任何「記錄/行」有一個新的「基本」父母?你有什麼嘗試?任何XPath教程都涵蓋了使用XPath選擇元素。 –

+0

只有一個記錄,所有在基本的,我只對這3個元素感興趣,我試過以下 <?xml version =「1.0」encoding =「Utf-8」?> <的xsl:for-每個選擇= 「屬性」> 的-的值 user3129787

+0

關閉選民的注意事項:我無法想出任何方式來理解此問題,並且不能將其理解爲aq在幫助中心的範圍說明中對編程有疑問。你能解釋一下嗎?這個問題描述了程序員通常使用的涉及工具的具體編程問題(這裏:XSLT作爲編程語言),而且問題很實際並且可以回答。 –

回答

0

你靠近。

而是在你的樣式表xsl:for-each的,你可以嘗試

<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"/>