xslt - XPath:无法从选定的标签中获取正确的值

标签 xslt xpath

这是我在 stackoverflow 上的第一个问题,所以请不要杀了我。 但是让我们开始解决问题。我有一个给定的 xhtml,需要从中获取特定信息。

到目前为止,这是我的 xsl 文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xpath-default-namespace="http://www.w3.org/1999/xhtml">
    <xsl:output method="xml" indent="yes" encoding="UTF-8"
        omit-xml-declaration="no" />
    <xsl:template match="html">
        <xsl:element name="Speisekarte">
            <xsl:attribute name="xsi:noNamespaceSchemaLocation"
                namespace="http://www.w3.org/2001/XMLSchema-instance">Speiseplan_Mensa_Schema.xsd</xsl:attribute>
            <xsl:for-each select=".//table[@class='table module-food-table']">
                <xsl:element name="Speisen">
                    <xsl:element name="namen">
                        <xsl:value-of select="./thead/tr/th[1]" />
                    </xsl:element>
                    <xsl:for-each select="./tbody/tr">
                        <xsl:element name="zutaten">
                            <xsl:value-of select="./td" />
                        </xsl:element>
                        <xsl:element name="preis">
                            <xsl:element name="Studenten">
                                <xsl:value-of select="./td[2]" />
                            </xsl:element>
                            <xsl:element name="Mitarbeiter">
                                <xsl:value-of select="./td[3]" />
                            </xsl:element>
                            <xsl:element name="Gäste">
                                <xsl:value-of select="./td[4]" />
                            </xsl:element>
                        </xsl:element>
                    </xsl:for-each>
                </xsl:element>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

我的问题是元素“zutaten”。我需要从此 xhtml 文件中获取“Hackbällchen in Rahmsauce”:

<tbody>
                  <tr>
                    <td style="width:70%">
                      Hackbällchen in <sup>(R)</sup> Rahmsauce <sup>(9,G,A,I)</sup>
                      <div class="price hidden-sm hidden-md hidden-lg">
                        <span>1,50&nbsp;&euro;</span><span>2,15&nbsp;&euro;</span><span>2,80&nbsp;&euro;</span>
                      </div>
                    </td>
                    <td class="hidden-xs" style="text-align:center">
                      1,50&nbsp;&euro;
                    </td>
                    <td class="hidden-xs" style="text-align:center">
                      2,15&nbsp;&euro;
                    </td>
                    <td class="hidden-xs" style="text-align:center">
                      2,80&nbsp;&euro;
                    </td>
                  </tr>
                </tbody>

我试过:

<xsl:value-of select="./td/text()" />

给我这个:Rahmsauce 中的 Hackbällchen 1,50 2,15 € 2,80 € 或者我试过:

<xsl:value-of select="./td/text()[not(self::div)]" />

这给我一个错误。

我尝试了很多不同的东西。你们能帮我吗? 希望我的英语足以理解我的问题。 提前致谢。

最佳答案

你要的表达是这样的……

<xsl:value-of select="td[1]/text()" />

通过执行 td/text()(此处不需要 ./ 前缀),您将获得所有 td 节点,以及所有所有这些节点下方的文本。

关于xslt - XPath:无法从选定的标签中获取正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47943070/

相关文章:

xml - 使用 XSLT 从 XML 文件中删除所有处理指令

Eclipse 支持 .xsl 文件中的断点吗?

python - 使用 Xpath 选择所有 dd 标签,直到新的 dl 标签

java - 为 Java 应用程序筛选格式不佳的 XHTML 页面的最佳方法是什么

xslt - 我如何使用 xsl :import with a variable in the path name?

php - 在 XSL 中定义 PHP 函数并调用它。可能的?如何?

xml - XSLT 访问目标元素源文件中的行和列位置

xml - xpath 轴中的命名空间是什么

html - 使用 XSL 解析 XML 中的标记

xpath - Jmeter while controller 似乎没有将变量评估为数字