Xslt XPath:无法从所选标记中获取正确的值
这是我关于stackoverflow的第一个问题,所以请不要杀我。 但让我们直奔问题。我有一个给定的xhtml,需要从中获取具体信息 以下是我目前的xsl文件:Xslt XPath:无法从所选标记中获取正确的值,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://ww
<?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>
Speiseplan_Mensa_Schema.xsd
我的问题在于元素“zutaten”。我需要从这个xhtml文件中获取“Rahmsauce中的Hackbällchen”:
<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 €</span><span>2,15 €</span><span>2,80 €</span>
</div>
</td>
<td class="hidden-xs" style="text-align:center">
1,50 €
</td>
<td class="hidden-xs" style="text-align:center">
2,15 €
</td>
<td class="hidden-xs" style="text-align:center">
2,80 €
</td>
</tr>
</tbody>
拉赫姆苏斯(R)的哈克巴肯(9,G,A,I)
1,50欧元;2,15欧元;;2,80欧元;
1,50欧元;
2,15欧元;;
2,80欧元;
我试过:
<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
节点以及所有这些节点下的所有文本。您缺少第一列上的谓词。XPath/td
将选择该行中的所有td
元素。使用xsl:value of
将生成所选内容的计算文本值,该值恰好是所有td元素(包括text()
节点子体)。您可以通过将xsl:value of
更改为xsl:copy of
来验证这一点
如果只需要第一列
td
中的text()
,请使用td[1]/text()
关于样式的注释,类似于XPath中不必要的/
。如果元素名是静态的,xsl:element
和xsl:attribute
可以替换为更易于阅读的文本元素和属性构造函数,因为它们看起来像您的输出。i、 e.…