我不确定为什么这个应用模板不起作用,我在我的XSL文件中调用了一个模板,它搜索一个元素以获得答案“YES”,然后继续使用另一个模板,但这就是它结束的地方,因为我似乎无法让下一个模板工作。(使用XSLT 1.0)
XML示例(这是一个较大XML的摘录,只是为了向您说明一点)
<Properties>
...
<benCut_1__1_ formula="">Yes</benCut_1__1_>
<CTRRad_1__2_ formula="">Yes</CTRRad_1__2_>
<CBlRad_1__2_ formula="">Yes</CBlRad_1__2_>
<CBRRad_1__2_ formula="">Yes</CBRRad_1__2_>
<CTLRad_1__2_ formula="">Yes</CTLRad_1__2_>
<CBlRad_1__3_ formula="">Yes</CBlRad_1__3_>
<CBRRad_1__3_ formula="">Yes</CBRRad_1__3_>
<CTLRad_1__3_ formula="">Yes</CTLRad_1__3_>
<CTRRad_1__3_ formula="">Yes</CTRRad_1__3_>
<bencut_1__2_ formula="">Yes</bencut_1__2_>
<benCut_2__1_ formula="">Yes</benCut_2__1_>
<benCutH_2__1_ formula="">21mm</benCutH_2__1_>
<benCutW_2__1_ formula="">21mm</benCutW_2__1_>
<benCutx_2__1_ formula="">21mm</benCutx_2__1_>
<benCutY_2__1_ formula="">21mm</benCutY_2__1_>
<benCTR_2__1_ formula="">21mm</benCTR_2__1_>
<benCTl_2__1_ formula="">21mm</benCTl_2__1_>
...
</Properties>
首先,我应用模板来搜索任何“benCut\u”或“benCut\u”结果,因为数据来自不同的情况(该问题与此问题不同)。
<xsl:template match="Properties" >
<xsl:apply-templates select="*[contains(translate(name(),'BENCUT','bencut'),'bencut_')]" />
</xsl:template>
然后,我需要将下一个应用模板运行到任何值为“Yes”的“bencut\u”中,并找到字符串的结尾(最后6个字符创建了一个匹配字符串,以查找XML中需要提取为一个组并以不同方式呈现的其他值
<xsl:template match="*[contains(translate(name(),'BENCUT','bencut'),'bencut_')]" >
<xsl:if test="text()='Yes'">
<xsl:apply-templates select="following-sibling::*[contains(name(),substring(name(),string-length(name())-5))]" />
</xsl:if>
</xsl:template>
这就是它开始失败的地方,因为我需要检查包含相同尾部字符串的“bencut\u”节点的同级节点,它们可以在前面或后面(我删除了我最初选择的“following sibling::[包含(name(),substring(name(),string length(name())-5)])];前面的同级节点:[包含(name(),substring(name(),string length(name())-5)],以尝试和调试代码)
[也确实不确定为什么“|”在另一种情况下起作用,而“如果有人对此有解释,那么”和“不会起作用”]
这是我要运行的最后一个模板,它将格式化我发现的其他兄弟姐妹的外观和呈现方式。
<xsl:template match="following-sibling::*[contains(name(),substring(name(),string-length(name())-5))]" >
<xsl:value-of select="name()" />
</xsl:template>
最终的结果是找到所有匹配的尾部“\u 1\u 2\u”,例如,考虑到CTRRad\u 1\u 2\u是右上角的剪切半径,可以看到以下数据。
切口(1)截面(2);右上半径-是左下半径-是切口高度-21mm切口宽度-21mm。。。
将有1-11切口1-3节,即33可能的切口块。
很难理解你的问题到底是什么。首先你说:
它开始失败,因为我需要检查包含相同尾字符串的“bencut_”节点的兄弟姐妹,它们可能在前面或后面
然后你说:
它识别让我困惑的模板的部分字符串,
尝试将此作为起点:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/Properties">
<root>
<xsl:apply-templates select="*[starts-with(translate(name(), 'BENCUT', 'bencut'), 'bencut_')][.='Yes']" />
</root>
</xsl:template>
<xsl:template match="*[starts-with(translate(name(), 'BENCUT', 'bencut'), 'bencut_')]">
<xsl:variable name="key" select="substring(name(), string-length(name()) - 5)" />
<group key="{$key}">
<xsl:apply-templates select="../*[contains(name(), $key)]" mode="group"/>
</group>
</xsl:template>
<xsl:template match="*" mode="group">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
应用于输入示例,结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<group key="_1__1_">
<benCut_1__1_ formula="">Yes</benCut_1__1_>
</group>
<group key="_1__2_">
<CTRRad_1__2_ formula="">Yes</CTRRad_1__2_>
<CBlRad_1__2_ formula="">Yes</CBlRad_1__2_>
<CBRRad_1__2_ formula="">Yes</CBRRad_1__2_>
<CTLRad_1__2_ formula="">Yes</CTLRad_1__2_>
<bencut_1__2_ formula="">Yes</bencut_1__2_>
</group>
<group key="_2__1_">
<benCut_2__1_ formula="">Yes</benCut_2__1_>
<benCutH_2__1_ formula="">21mm</benCutH_2__1_>
<benCutW_2__1_ formula="">21mm</benCutW_2__1_>
<benCutx_2__1_ formula="">21mm</benCutx_2__1_>
<benCutY_2__1_ formula="">21mm</benCutY_2__1_>
<benCTR_2__1_ formula="">21mm</benCTR_2__1_>
<benCTl_2__1_ formula="">21mm</benCTl_2__1_>
</group>
</root>
附笔。
更高效的版本将使用密钥:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="elem-by-tail" match="*" use="substring(name(), string-length(name()) - 5)" />
<xsl:template match="/Properties">
<root>
<xsl:apply-templates select="*[starts-with(translate(name(), 'BENCUT', 'bencut'), 'bencut_')][.='Yes']" />
</root>
</xsl:template>
<xsl:template match="*[starts-with(translate(name(), 'BENCUT', 'bencut'), 'bencut_')]">
<xsl:variable name="key" select="substring(name(), string-length(name()) - 5)" />
<group key="{$key}">
<xsl:apply-templates select="key('elem-by-tail', $key)" mode="group"/>
</group>
</xsl:template>
<xsl:template match="*" mode="group">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
尝试使用FTL模板进行转换时出现异常!freemarker.core.nonNumericalException:对于“-”左手操作数:需要一个数字,但它的计算结果是序列+散列(包装器:f.e.dom.nodelistmodel):==>item.target[在模板“marketing/widgets/freemarker/newblogpost-update.ftl”中,第31行,第105列]
问题 你想匹配或者搜索特定模式的文本 解决方案 如果你想匹配的是字面字符串,那么你通常只需要调用基本字符串方法就行, 比如 str.find() , str.endswith() , str.startswith() 或者类似的方法: >>> text = 'yeah, but no, but yeah, but no, but yeah' >>> # Exact match >>> text =
如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?
问题内容: 我想获取所有属于以下子项的标签: 我知道如何找到像这样的特定类的元素: 但是我不知道如何找到所有的孩子,而不是其他孩子。 就像我想选择: 问题答案: 尝试这个
将grpc与Node一起使用,对我的查询的响应中的枚举将解析为整数值。但是,当我使用BloomRPC进行相同的查询时,枚举将解析为整数值。 是否有参数或选项可以强制使用Node grpc将这些枚举解析为字符串?
我正在使用Mongoostic,它工作得很好,但我面临的问题是,如何从方法并将其传递给方法? 例如: 你们是怎么解决这个问题的?这是一个非常基本的搜索,用户搜索时,它会将用户重定向到另一个页面,在那里它要么显示已找到的结果,要么未找到。