在将常规XML转换为Dublin Core XML时添加名称空间前缀

时间:2014-03-13 14:17:53

标签: xml xslt namespaces xslt-1.0

我很可能会遗漏一些明显的东西,但我不清楚如何编写我的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转换自动为每个元素添加前缀?

1 个答案:

答案 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>

请注意,无法确定是否可以将其集成到当前样式表中。不幸的是,你没有透露太多内容。