2012-11-21 61 views
1

我有一個XML文件,其中包含用戶ID和名稱。我想提取所有這些屬性都有值的元素。如何將所有xml的完整元素提取到文本文件中?

這是我的XML

<pens> 
<pen id="A"> 
    <user name="USER1" email="USER1EMAIL" /> 
</pen> 
<pen id="B"> 
    <user name="USER2" email="USER2EMAIL" /> 
</pen> 
<pen id="C"></pen> 
<pen id="D"> 
    <user name="USER3" email="USER3EMAIL" /> 
</pen> 
</pens> 

我需要一個出這樣

A - USER1 
B - USER2 
D - USER3 

我嘗試使用XSL,但我不明白...可以有人幫忙吧。 感謝

+0

什麼語言,你想用這樣做呢? –

+0

我想使用XSLT來實現這個 –

回答

3

當這個XSLT:

<pens> 
    <pen id="A"> 
    <user name="USER1" email="USER1EMAIL"/> 
    </pen> 
    <pen id="B"> 
    <user name="USER2" email="USER2EMAIL"/> 
    </pen> 
    <pen id="C"/> 
    <pen id="D"> 
    <user name="USER3" email="USER3EMAIL"/> 
    </pen> 
</pens> 

......想要的結果產生:

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

    <xsl:template match="user[@name][@email]"> 
    <xsl:value-of select="parent::*/@id" /> 
    <xsl:text> - </xsl:text> 
    <xsl:value-of select="@name" /> 
    <xsl:text>&#10;</xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 

......是對你的原始XML應用

A - USER1 
B - USER2 
D - USER3 

說明:

  • 我們設置<xsl:output>元素的@method屬性有text值(因爲我們感興趣的是文本的結果)。

  • 一個模板匹配<user>具有@name@email屬性定義的元素。

  • 當一個這樣的<user>元件被發現,它的父元素的屬性@id,破折號,元素的@name屬性的值,最後,一個換行字符的我們輸出的值。

將此結果保存到文件取決於您使用的是哪個XSLT處理器。如果你通過命令行(例如,一路xsltproc一樣)運行轉換,你可以做這樣的事情:

$ xsltproc t.xsl input.xml > output.xml

+0

很酷,這有助於真正解決我的問題。謝謝 –

+0

@AlPhaba - 樂於幫助! – ABach

相關問題