属性的XSLT副本留空

属性的XSLT副本留空,xslt,Xslt,我试图修改现有XSLT,将输入XML中文件节点的originalfilename属性作为输出XML中反馈的文件属性。我想我误解了声明的副本,我将非常感谢任何帮助。此时,我想要的输出在反馈节点上显示一个空文件属性 XSLT 输入 先进材料和工艺(荣誉理学硕士) 先进材料与工艺(理学硕士) [ic14epub 20.01.2015 09:28:43]“荣誉”被取消(据我所知,关于这一点的讨论仍在进行中) 期望输出 [ic14epub 20.01.2015 09:28:43]“荣誉”被取消(据

我试图修改现有XSLT,将输入XML中文件节点的originalfilename属性作为输出XML中反馈的文件属性。我想我误解了声明的副本,我将非常感谢任何帮助。此时,我想要的输出在反馈节点上显示一个空文件属性

XSLT

输入

先进材料和工艺(荣誉理学硕士)
先进材料与工艺(理学硕士)
[ic14epub 20.01.2015 09:28:43]“荣誉”被取消(据我所知,关于这一点的讨论仍在进行中)
期望输出
[ic14epub 20.01.2015 09:28:43]“荣誉”被取消(据我所知,关于这一点的讨论仍在进行中)
先进材料和工艺(荣誉理学硕士)
先进材料与工艺(理学硕士)

只需在
中的
文件
之前添加一个
/
,即可获得所需的输出


但是,我建议使用

<xsl:value-of select="../../../@originalfilename"/>


而不是绝对路径,因此如果您有更多的文件,它仍然可以工作。

您想要第一个
祖先的
@originalfilename

<xsl:template match="Comment">
  <feedback 
    id="{count(preceding::Comments)+1}"
    file="{ancestor::file[1]/@originalfilename}"
  >
    <xsl:value-of select="." />
  </feedback>
</xsl:template>


请注意属性值模板(大括号)。它们可以节省大量的输入。

感谢没有使用绝对路径解决了问题,但是我接受了Tomalak的答案,因为对属性值模板的引用是一个有用的学习点。您是否迭代文件/文件/分段对,因为可能有多个?如果有多个,是否希望每次都有相同的源和目标输出?
    <feedback id="1" file="C:\Users\A\Documents\Studio 2014\Projects\15_002_\de-DE\master\advanced-materials-and-processes-msc-hons.xml">[ic14epub 20.01.2015 09:28:43] 'hons' taken out (discussion of this still ongoing as far as I'm aware)</feedback>
       <source>Advanced Materials and Processes (M.Sc.hons.)</source>
       <target>Advanced Materials and Processes (MSc)</target>
<xsl:value-of select="/files/file/@originalfilename"/>
<xsl:value-of select="../../../@originalfilename"/>
<xsl:template match="Comment">
  <feedback 
    id="{count(preceding::Comments)+1}"
    file="{ancestor::file[1]/@originalfilename}"
  >
    <xsl:value-of select="." />
  </feedback>
</xsl:template>