2011-05-11 59 views
2

我有以下類型的文件包含XML格式如何從.xsl文件中的xml文件獲取所需的標記值?

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <serviceImpl category="default"> 
     <package>esterMemoryManagement</package> 
     <service singleton="true"> 
      <provides>xoc.hw.cor.memgt.ZContentType</provides> 
      <brief>This sis first sdrevice</brief> 
     </service> 
    </serviceImpl> 
    <serviceImpl category="default"> 
     <package>w.cor.TesterM</package> 
     <service singleton="true"> 
      <provides>xoc.hw.ZAccessTypeProvid</provides> 
      <brief>This sis first sdrevice</brief> 
     </service> 
    </serviceImpl> 
</root> 

我必須獲得的.xsl文件標籤<provides></provides>內的所有值。我怎樣才能做到這一點? 在此先感謝。

+0

我在你的問題中看不到任何XML。另外,你完全不清楚你想做什麼。我強烈建議您重新解釋該問題,或將其刪除。 – MarcoS 2011-05-11 09:30:04

+1

@MarcoS,通過'|編輯|'按鈕尋找幫助:-) – rsp 2011-05-11 10:45:00

+0

@rsp:你是對的,謝謝:) – MarcoS 2011-05-11 10:59:34

回答

0

下面是做這件事的一種方法:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:output method="text"/> 

    <xsl:template match="root"> 
     <xsl:apply-templates select="serviceImpl"/> 
    </xsl:template> 

    <xsl:template match="serviceImpl"> 
     <xsl:apply-templates select="service"/> 
     <xsl:text>,</xsl:text> 
    </xsl:template> 

    <xsl:template match="service"> 
     <xsl:apply-templates select="provides"/> 
    </xsl:template> 

    <xsl:template match="provides"> 
     <xsl:value-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 

您可能還需要在this question看看,和相關的答案。

0

您可以使用XSL來過濾掉類似值:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="text"/> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="//serviceImpl/provides" /> 
    </xsl:template> 

    <xsl:template match="serviceImpl/provides"> 
    <xsl:value-of select="text()" /> 
    <xsl:text>&#x0A;</xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 

(順便說一句,你的示例XML是不正確的在所有地方)

1

下面是一個簡短而完整的解決方案

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

<xsl:template match="provides"> 
    <xsl:value-of select="concat(.,'&#xA;')"/> 
</xsl:template> 
<xsl:template match="text()"/> 
</xsl:stylesheet> 

將此轉換應用於提供的XML文檔時:

<root> 
    <serviceImpl category="default"> 
     <package>esterMemoryManagement</package> 
     <service singleton="true"> 
      <provides>xoc.hw.cor.memgt.ZContentType</provides> 
      <brief>This sis first sdrevice</brief> 
     </service> 
    </serviceImpl> 
    <serviceImpl category="default"> 
     <package>w.cor.TesterM</package> 
     <service singleton="true"> 
      <provides>xoc.hw.ZAccessTypeProvid</provides> 
      <brief>This sis first sdrevice</brief> 
     </service> 
    </serviceImpl> 
</root> 

的想要的,正確的結果產生

xoc.hw.cor.memgt.ZContentType 
xoc.hw.ZAccessTypeProvid 

說明

  1. 產生的結果是所述一個匹配provides唯一的模板。

  2. 第二模板相匹配的任何文本節點並有一個空體,這有效地將覆蓋內置的模板文本節點並防止(「刪除」)的任何匹配的文本節點的XSLT被輸出(動作即否則將由XSLT內置模板執行)。

相關問題