我有一個可以替換一些xml值的xsl模板。 現在我想要這些值由我的代碼動態生成。帶動態值的XSLT替換?
Transformer trans = TransformerFactory.newInstance().newTransformer(new StreamSource(new File("foo.xsl"));
trans.transform(new StreamSource(new File("foo.xml"), new StreamResult(new File("output.xml")));
我該如何獲取,例如只替換id = 1的名稱?此外,由javacode動態提供該ID,而不是硬編碼?
<?xml version="1.0"?>
<my:accounts xmlns:my="http://myns">
<my:account>
<my:name>alex</my:name>
<my:id>1</my:id>
</my:account>
<my:account>
<my:name>Fiona</my:name>
<my:id>2</my:id>
</my:account>
</my:accounts>
這將替換所有名稱:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://myns">
<xsl:param name="propertyName" select="'alex'"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[local-name()='account']/*[local-name()='name']/text()[.='{$propertyName}']">
<xsl:text>johndoe</xsl:text>
</xsl:template>
</xsl:stylesheet>
真的是一個很好的例子,它的工作原理。但是如果我將id改爲一個字符串,假設' test '和' '這不起作用。我在這裏錯過了什麼? –
membersound
好吧,我的壞。使用'<... select =''test'「/>' – membersound
@membersound,不客氣。是的,你必須指定一個字符串文字,否則它被解釋爲節點名稱。 –