2

我知道这是超级菜鸟,但我只是不明白为什么我的代码不起作用。这是 XML 片段:

<root>
  <cookies>
    <lastviewedentityname>Category</lastviewedentityname>
    <lastviewedentityinstanceid>72</lastviewedentityinstanceid>
    <lastviewedentityinstancename>Fall Florals</lastviewedentityinstancename>
    some random text bla bla
  </cookies>
  <QueryString>
    <categoryid>34</categoryid>
  </QueryString>
  <!-- other nodes -->
</root>

这是 XSL 片段:

<?xml version="1.0" standalone="yes" ?>
<package version="2.1" displayname="Categories" debug="false" includeentityhelper="true">
  <PackageTransform>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ise="urn:ise" exclude-result-prefixes="ise">
        <xsl:output method="html" omit-xml-declaration="yes"/>

            <!-- other code -->

            <xsl:value-of select="/root/cookies/lastviewedentityinstanceid"/>

            <!-- other code -->

    </xsl:stylesheet>
  </PackageTransform>
</package>

我正在寻找的结果是

72

但似乎我得到了空字符串或其他东西。看看这个:http ://www.w3schools.com/xsl/xsl_value_of.asp ,我假设我的代码没问题。此外,确认这一点是此代码:

<xsl:value-of select="/root/QueryString/categoryid"/>

给我正确的价值

34

然后在我试图寻找答案的过程中,我找到了这个网站: http: //www.mizar.dk/XPath/Default.aspx我注意到当我在这里尝试时,它突出显示了元素,而不是其中的值: http: //screencast.com/t/NXuNiCHbEd0T

这里有更多信息:我正在开发的系统称为 Interprise Suite Ecommerce(这就是“ise”的来源)。这是他们的网络软件,它与称为 Interprise Suite 的 ERP 软件集成在一起。ISE 是前段时间改编自 AspDotNetStoreFront 的电子商务软件。我将尝试解释我所拥有的有限知识。

正在加载的页面是产品或类别页面。我正在处理的这个特定文件提供了侧边栏产品导航菜单的布局。该文件称为 rev.categories.xml.config。此文件包含 XSLT 代码。它正在转换的原始 XML 数据,我不知道它来自哪里,也无权访问它。借助 Dimitre 在上一个问题中的帮助,我能够在网页中重现 XML 数据,这样我就可以了解更多。在其输出中,顶级节点是

<root>

加载此 XML 包的文件称为 template.ascx。它是一个模板或“主”文件。在 ASPDNSF 中,您可以使用这些称为“令牌”的东西将内容加载到页面中,而这个令牌就是调用 rev.categories.xml.config 来激活并执行其操作的东西。令牌如下所示:

(!XmlPackage Name="rev.categories"!)

我不确定令牌是如何工作的。我的想法是它不相关,因为除了这一行代码之外,此文件中的其他所有内容都在工作。

请原谅我缺乏知识、经验和适当的语言。

编辑:这是 rev.categories.xml.confg 完整代码的链接。 http://jsfiddle.net/v5cNM/

4

1 回答 1

1

XSLT 处理器支持嵌入式样式表(如果有的话)非常少(我不知道)

在 XML 文档上应用转换的正确且普遍支持的方法是将 XSLT 样式表放在单独的 XML 文档中(通常位于其自己的文件中)。

<xsl:stylesheet>(或其同义词xsl:transform)必须是样式表的顶部元素。

这种转换(占用自己的文件):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:value-of select=
  "/root/cookies/lastviewedentityinstanceid"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<root>
  <cookies>
    <lastviewedentityname>Category</lastviewedentityname>
    <lastviewedentityinstanceid>72</lastviewedentityinstanceid>
    <lastviewedentityinstancename>Fall Florals</lastviewedentityinstancename>
    some random text bla bla
  </cookies>
  <!-- other nodes -->
</root>

产生想要的正确结果

72
于 2012-09-09T22:53:47.230 回答