我很可能会遗漏一些明显的东西,但我不清楚如何编写我的XSLT样式表来转换一个"常规"用于生成Dublin Core XML文件的XML文件,该文件包含命名空间" dc"每个元素的前缀。我在这里看了很多其他的答案,似乎无法弄清楚如何做到这一点。 (我使用msxsl.exe进行转换。)
例如,我试图从我原来的XML文档中转换这一行:
<title>Message received clairaudiently by Mrs. Begg at Lake Pleasant, Fri. March 9, 1945.</title>
...进入此(在通过XSLT转换运行之后):
<dc:title>Message received clairaudiently by Mrs. Begg at Lake Pleasant, Fri. March 9, 1945.</dc:title>
这是我在我的XSL文件中使用的样式表元素:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://:www.w3.org/1999/xlink"
xmlns:dc="http://purl.org/dc/elements/1.1/">
所以我的问题是,我是否需要硬编码&#34; dc:&#34;在XSL样式表的单个元素中加上前缀,即la:
<dc:title><xsl:value-of select="title" /></dc:title>
或者有没有办法让XSL转换自动为每个元素添加前缀?
答案 0 :(得分:0)
[我]有办法让XSL转换自动为每个元素添加前缀吗?
如果要在没有例外的情况下为所有元素添加前缀,则不必手动执行。例如,如果您有一个输入文件,如:
<强>输入强>
<?xml version="1.0"?>
<root>
<item/>
<item/>
</root>
应用以下转换。除了使用dc:
为所有元素添加前缀之外,样式表不会更改任何内容。
<强>样式表强>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{concat('dc:',name())}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<?xml version="1.0" encoding="utf-8"?>
<dc:root xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:item/>
<dc:item/>
</dc:root>
请注意,无法确定是否可以将其集成到当前样式表中。不幸的是,你没有透露太多内容。