2013-01-17 27 views
0

讀取從屬性的XML標記值我想從屬性「名」在下面使用XSLT提供的XML片段閱讀價值「查詢」。任何人都可以幫助我嗎?我對xslt完全陌生。如何使用XSLT

在此先感謝。 :)

<?table name="enquiry"?> 
<thead> 
<row rowsep="1"> 
<entry colname="col1"> 
+1

然後....是否真的是你的XML樣本?它實際上並不完整(即沒有結束標籤),而且更加不重要的是**表**節點是一個處理指令!你真的想在那裏留下問號嗎?謝謝! –

+0

@TimC - 關於pi很可能是一個錯誤的好處。在我發佈答案之前,我應該已經注意到了。 –

+0

@TimC,其實我只拿了一小部分代碼。是的,它有一個結束標籤,問號也是必需的。 –

回答

2

一個更普遍的方法是這樣定義的模板:

<xsl:template name="GetPIAttribute"> 
    <xsl:param name="pi" /> 
    <xsl:param name="attrName" /> 

    <xsl:variable name="toFind" select="concat(' ', $attrName, '=')"/> 
    <xsl:variable name="piAdjusted" select="concat(' ', normalize-space($pi))"/> 

    <xsl:variable name="foundMatch" select="substring-after($piAdjusted, $toFind)" /> 
    <xsl:if test="$foundMatch"> 
     <xsl:variable name="delimiter" select="substring($foundMatch, 1, 1)" /> 
     <xsl:value-of select="substring-before(substring-after($foundMatch, $delimiter), $delimiter)"/> 
    </xsl:if> 
    </xsl:template> 

然後你可以調用它來檢索您想要的任何僞屬性,如下所示:

<xsl:template match="/"> 
    <xsl:call-template name="GetPIAttribute"> 
     <xsl:with-param name="pi" select="/processing-instruction()[name() = 'table']" /> 
     <xsl:with-param name="attrName" select="'name'" /> 
    </xsl:call-template> 
    </xsl:template> 

t他的方法是,它解釋了單引號或雙引號中的值,並且如果需要提取多個值,則可以重用該值。

+0

當你需要像「<?myPI grid =」wide「id =」a123「?>''這樣的PI的id」屬性「時,這將不起作用。 '廣'將被退回。因此,foundMatch變量的select屬性應該是'substring-after(concat('',normalize-space($ pi)),concat('',$ attrName,'=')' –

+0

這是真的。我已經更新了我的答案。 – JLRishe

0

這實際上不是一個屬性。這只是處理指令的價值。

我想獲得價值的唯一途徑就是通過一些字符串操作...

<xsl:template match="processing-instruction()[name()='table']"> 
    <xsl:value-of select="substring-before(substring-after(.,'name=&quot;'),'&quot;')"/> 
</xsl:template> 
+0

在轉換過程中會跳過xml文件中的處理指令。有沒有什麼辦法可以使這個可讀? –