提供名称空间前缀以便将XML转换为XSLT已在SO中广泛涵盖。参见例如XSLT Transform XML with Namespaces,XSLT with XML source that has a default namespace set to xmlns和XSLT Transformating XML to XML。然而,经过无数个小时的研究和反复试验,我可以说我没能使它发挥作用。
这是我的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<library xmlns="http://void.net/library/1.0">
<catalog>
<cd id="c1">
<singer id="s1">
<name>Kate</name>
<surname>Apple</surname>
</singer>
<title>Great CD</title>
</cd>
<cd id="c2">
<singer id="s2">
<name>Mary</name>
<surname>Orange</surname>
</singer>
<title>Even better CD</title>
</cd>
</catalog>
</library>
这是我到目前为止所得到的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
xmlns:b="http://void.net/library/1.0"
exclude-result-prefixes="b">
<xsl:output method="text" indent="no" />
<xsl:template match="/b:library">
<xsl:text>singer,title
</xsl:text>
<xsl:for-each select="b:catalog/b:cd">
<xsl:value-of select="concat(b:singer/b:name, ' ', b:singer/b:surname, ', ', b:title, '
')" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
我修改了样式表中的拼写错误,并想出了这个:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:b="http://void.net/library/1.0" exclude-result-prefixes="b">
<xsl:output method="text" indent="no" />
<xsl:template match="/b:library">
<xsl:text>singer,title
</xsl:text>
<xsl:for-each select="b:catalog/b:cd">
<xsl:value-of select="concat(b:singer/b:name, ' ', b:singer/b:surname, ', ', b:title, '
')" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
singer,title
Kate Apple, Great CD
Mary Orange, Even better CD
所以一切似乎都按预期工作。