Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 用xsl整合结构_Xslt - Fatal编程技术网

Xslt 用xsl整合结构

Xslt 用xsl整合结构,xslt,Xslt,这可以在XLST V2.0中完成吗 我有一个编辑器的输出,它以混合顺序提供标记文本。我需要巩固它 给定HTML 来源: 强调粗体和强调 大胆而有力 目标: 强调粗体和强调 大胆而有力 然而,这些源组合也可能发生,但它们不能 由于并非所有文本都强调、粗体或两者兼而有之,因此应合并: 普通文本强调粗体和强调体 大胆而有力 普通文本,但从para1开始强调并加粗 普通文本,但从para1开始强调并加粗 您当然可以在XSLT/XPath中检查这样的条件,例如para1[子代::text()[norma

这可以在XLST V2.0中完成吗

我有一个编辑器的输出,它以混合顺序提供标记文本。我需要巩固它

给定HTML

来源:
强调粗体和强调
大胆而有力
目标:
强调粗体和强调
大胆而有力
然而,这些源组合也可能发生,但它们不能
由于并非所有文本都强调、粗体或两者兼而有之,因此应合并:
普通文本强调粗体和强调体
大胆而有力
普通文本,但从para1开始强调并加粗
普通文本,但从para1开始强调并加粗

您当然可以在XSLT/XPath中检查这样的条件,例如
para1[子代::text()[normalize-space()]中的每个$t满足($t/parent::em或$t/./parent::em)]
将检查
para1
的任何非空白文本节点子代是否具有
em
父代或祖辈。基于此,您可以编写如下代码

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:template match="@*|node()" mode="#all">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" mode="#current"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="para1[every $t in descendant::text()[normalize-space()] satisfies ($t/parent::em or $t/../parent::em)]">
        <xsl:copy>
            <em>
                <xsl:apply-templates mode="strip"/>
            </em>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="em" mode="strip">
        <xsl:apply-templates/>
    </xsl:template>
</xsl:transform>

转变

<?xml version="1.0" encoding="UTF-8"?>
 <para1>
  <para2>
     <em>emphazised <bold>bolded and emphazised</bold></em>
  </para2>
  <para2>
    <bold><em>bolded and emphazised</em></bold>
  </para2>
 </para1>

强调粗体和强调
大胆而有力
进入


强调粗体和强调
大胆而有力
和树叶

 <para1>
  <para2>
    normal text <em>emphazised</em> <bold>bolded<em> and emphazised</em></bold>
  </para2>
  <para2>
    <bold>bolded<em> and emphazised</em></bold>
  </para2>
 </para1>

普通文本强调粗体和强调体
大胆而有力

不变。当然,同时处理各种元素(如
em
bold
)会变得更加困难。

如果您首先将发布的示例修复为格式良好的XML,可能会更好(
是空元素,而不是结束标记,即
)然后向我们展示您要为发布的示例创建的结果。好的,编辑了示例您说输入是HTML,但我认为HTML中没有任何
para1
para2
元素。HTML中的
em
是一个内联元素,它属于块元素的内部,比如
div
p
,在HTML中,将
foo

bar

转换为
foo

bar

是没有意义的,因为这不是一个有效的结构,浏览器中的任何纠错HTML解析器在遇到它时都会重新更正该结构。您好,这确实不是纯HTML,但这是我从一个GWT组件的源代码中得到的。我将其进一步转换为另一种格式,这种格式无法理解和类似的HTML标记。目标格式需要在para标记中合并信息。所以问题仍然围绕着原则问题,XSLT能在这种情况下使用吗?
 <para1>
  <para2>
    normal text <em>emphazised</em> <bold>bolded<em> and emphazised</em></bold>
  </para2>
  <para2>
    <bold>bolded<em> and emphazised</em></bold>
  </para2>
 </para1>