元素不属于文档('')

时间:2010-06-15 14:27:09

标签: xslt namespaces

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no" encoding="windows-1251"/>

<xsl:template match="/">
    <xsl:for-each select="document('')//w">
        <xsl:value-of select="@e"/>
    </xsl:for-each>
</xsl:template>

<my:translations xmlns:my="my:my">
    <w e="name" r="Название"/>
    <w e="model" r="Модель"/>
    <w e="year" r="Год"/>
    <w e="glass_type" r="Тип"/>
    <w e="scancode" r="Сканкод"/>
    <w e="eurocode" r="Еврокод"/>
    <w e="comment" r="Комментарий"/>
    <w e="glass_size" r="Размер"/>
    <w e="vendor" r="Производитель"/>
    <w e="trademark" r="Торговая марка"/>
    <w e="fprice" r="Цена"/>
</my:translations> 

</xsl:stylesheet>

我没有结果。怎么了?


请原谅我在提出问题时的粗心大意。

3 个答案:

答案 0 :(得分:0)

应该没有任何问题。这个样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 

<my:translations xmlns:my="my:my"> 
    <w e="name" r="Название"/> 
    <w e="model" r="Модель"/> 
    <w e="year" r="Год"/> 
    <w e="glass_type" r="Тип"/> 
    <w e="scancode" r="Сканкод"/> 
    <w e="eurocode" r="Еврокод"/> 
    <w e="comment" r="Комментарий"/> 
    <w e="glass_size" r="Размер"/> 
    <w e="vendor" r="Производитель"/> 
    <w e="trademark" r="Торговая марка"/> 
    <w e="fprice" r="Цена"/> 
</my:translations>  

<xsl:template match="/"> 
<root> 
<xsl:value-of select="count(document('')//w)"/>
</root> 
</xsl:template> 

</xsl:stylesheet> 

这是任何输入的结果:

<root>11</root>

修改:使用您发布的新样式表,我得到了预期的结果:

namemodelyearglass_typescancodeeurocodecommentglass_sizevendortrademarkfprice

答案 1 :(得分:0)

最可能的问题 - 在您礼貌未显示的代码中 - 是一个可能的默认命名空间

如果是这种情况(除此之外我擅长算命),这意味着解决方案将如下所示:

document('')//x:w

其中prefic x:绑定到您的默认命名空间。

答案 2 :(得分:0)

更新:OP终于发布了他的代码。 代码中没有问题

提供转换时:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no" encoding="windows-1251"/>

<xsl:template match="/">
    <xsl:for-each select="document('')//w">
        <xsl:value-of select="@e"/>
    </xsl:for-each>
</xsl:template>

<my:translations xmlns:my="my:my">
    <w e="name" r="Название"/>
    <w e="model" r="Модель"/>
    <w e="year" r="Год"/>
    <w e="glass_type" r="Тип"/>
    <w e="scancode" r="Сканкод"/>
    <w e="eurocode" r="Еврокод"/>
    <w e="comment" r="Комментарий"/>
    <w e="glass_size" r="Размер"/>
    <w e="vendor" r="Производитель"/>
    <w e="trademark" r="Торговая марка"/>
    <w e="fprice" r="Цена"/>
</my:translations>

</xsl:stylesheet>

在任何XML文档(未使用)上运行7个XSLT 1.0处理器和2个XSLT 2.0处理器,所有这些都产生相同的正确和想要的结果:

namemodelyearglass_typescancodeeurocodecommentglass_sizevendortrademarkfprice