【问题标题】:The elements do not fall into document('')元素不属于 document('')
【发布时间】:2011-03-04 00:44:17
【问题描述】:
<?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>

我没有结果。什么错误?


请原谅我在提问题时粗心。

【问题讨论】:

  • 如果有针对糟糕问题的竞赛,您可能会获得第一名!您的完整样式表在哪里?你为什么要通过发布会阻止任何人(算命先生除外)尝试的模糊问题来排除获得答案的机会?
  • @Dimitre Novatchev,你是对的。我更正了这个问题。
  • 如果这真的是你的代码,它没有问题——它产生了想要的结果。请参阅我的新答案。您使用的是什么 XSLT 处理器?

标签: xslt namespaces


【解决方案1】:

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

<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

【讨论】:

  • @Alejandro, count 函数返回结果 - 0。
  • @Kalinin:你进行了这个转换吗?我得到了确切的结果。你用的是什么处理器?另外,我不明白你的编辑。你需要什么?
  • @kalinin:我们无法帮助您找到未发布代码中的错误。
  • @Alejandro,我暂停一下。我必须了解我们的 CMS 是如何工作的。
【解决方案2】:

最可能的问题——在你礼貌地没有显示的代码中——是一个可能的默认命名空间

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

document('')//x:w

前缀 x: 绑定到您的默认命名空间。

【讨论】:

    【解决方案3】:

    更新: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
    

    【讨论】:

    • 我不明白发生了什么(我的问题是什么)。也许这是因为我们是如何形成输出文档的。让你再受苦是没有意义的。我必须了解我们的 CMS 如何生成输出 html。我暂停一下。
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多