讀取從屬性的XML標記值我想從屬性「名」在下面使用XSLT提供的XML片段閱讀價值「查詢」。任何人都可以幫助我嗎?我對xslt完全陌生。如何使用XSLT
在此先感謝。 :)
<?table name="enquiry"?>
<thead>
<row rowsep="1">
<entry colname="col1">
讀取從屬性的XML標記值我想從屬性「名」在下面使用XSLT提供的XML片段閱讀價值「查詢」。任何人都可以幫助我嗎?我對xslt完全陌生。如何使用XSLT
在此先感謝。 :)
<?table name="enquiry"?>
<thead>
<row rowsep="1">
<entry colname="col1">
一個更普遍的方法是這樣定義的模板:
<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他的方法是,它解釋了單引號或雙引號中的值,並且如果需要提取多個值,則可以重用該值。
當你需要像「<?myPI grid =」wide「id =」a123「?>''這樣的PI的id」屬性「時,這將不起作用。 '廣'將被退回。因此,foundMatch變量的select屬性應該是'substring-after(concat('',normalize-space($ pi)),concat('',$ attrName,'=')' –
這是真的。我已經更新了我的答案。 – JLRishe
這實際上不是一個屬性。這只是處理指令的價值。
我想獲得價值的唯一途徑就是通過一些字符串操作...
<xsl:template match="processing-instruction()[name()='table']">
<xsl:value-of select="substring-before(substring-after(.,'name="'),'"')"/>
</xsl:template>
在轉換過程中會跳過xml文件中的處理指令。有沒有什麼辦法可以使這個可讀? –
然後....是否真的是你的XML樣本?它實際上並不完整(即沒有結束標籤),而且更加不重要的是**表**節點是一個處理指令!你真的想在那裏留下問號嗎?謝謝! –
@TimC - 關於pi很可能是一個錯誤的好處。在我發佈答案之前,我應該已經注意到了。 –
@TimC,其實我只拿了一小部分代碼。是的,它有一個結束標籤,問號也是必需的。 –