我有一個XML文件,其中包含以下內容:匹配與XSI的元素:type屬性
<contents id="MLC1" name="Requirement1" uri="C:\abc.txt" xsi:type="requirement:Requirement" type="">
<contents id="GO1" name="Goal1" uri="C:\abc.txt" xsi:type="goal:Goal">
我想我的XML文件,它具有屬性xsi:type="requirement:Requirement"
讓我內匹配的所有元素可以爲它添加一個名爲「label」的新屬性。這是我的樣式表:
<xsl:template match="//contents[@type='requirement:Requirement']">
<contents>
<xsl:attribute name="label">
<xsl:value-of select="@name"/>
</xsl:attribute>
<xsl:apply-templates select="node()|@*"/>
</contents>
</xsl:template>
我已經宣佈我的樣式表xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
,但它似乎是無法匹配任何東西。我懷疑它是因爲在沒有xsi命名空間的原始xml中還有另一個屬性「type」。有沒有人有任何建議我應該用什麼來正確匹配這個元素?
好吧,我實際上已經嘗試過使用在XSLT解析器中構建的應該使用Xalan的java 7。嘗試使用JLRishe的回答給我一個異常javax.xml.transform.TransformerConfigurationException:檢查表達式類型funcall(QName,[literal-expr(dk.dtu.imm.red.specificationelements.requirement),literal-expr(Requirement )])'..嘗試使用XSLT 1.0解決方案不符合任何結果。我將嘗試查明它是否適用於其他XSLT解析器(例如Saxon),並在此處再次發佈我的發現。 –
我遵循從Saxon指南(S9APIExamples.java)給出的XSLT測試示例,並且它在XSLT 1.0解決方案中正常工作,所以我將使用該示例。謝謝您的幫助! –