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:如何从源代码中丢弃不需要的HTML节点?_Xslt_Xml Parsing_Xslt 1.0 - Fatal编程技术网

XSLT:如何从源代码中丢弃不需要的HTML节点?

XSLT:如何从源代码中丢弃不需要的HTML节点?,xslt,xml-parsing,xslt-1.0,Xslt,Xml Parsing,Xslt 1.0,我正在使用xslt1.0,并在osxyosemite上使用xsltproc。 源内容为HTML;目标内容是XML 这是一个相当普遍的问题。我要所有的“无趣” 只需从输出中丢弃节点。我看到了一切 像这样的指令: <xsl:template match="node()|script"/> <xsl:template match="*"> <xsl:apply-templates/> </xsl:template> <xsl:templat

我正在使用
xslt1.0
,并在osxyosemite上使用
xsltproc
。 源内容为HTML;目标内容是XML

这是一个相当普遍的问题。我要所有的“无趣” 只需从输出中丢弃节点。我看到了一切 像这样的指令:

<xsl:template match="node()|script"/>

<xsl:template match="*">
  <xsl:apply-templates/>
</xsl:template>
<xsl:template match="node()[not(locations)]|script"/>
它只是将某些
元素替换为空格。 嗯,
node()
阻止后一个模板生效, 因为包含换行符的相关文本节点被丢弃 已经

好的,为了纠正这个问题,我做了以下工作来代替catch all
节点()


但这正是问题所在:我现在正在拼凑一个模板 其匹配条件在源 内容改变

是否有一个更简单的指令可以完成同样的事情?我的目标是这样的:

<xsl:template match="node()|script"/>

<xsl:template match="*">
  <xsl:apply-templates/>
</xsl:template>
<xsl:template match="node()[not(locations)]|script"/>


谢谢。

如果我理解正确,您只需要输出中的一些节点,其余的您不关心。在本例中,我尝试只捕获li元素,并丢弃其余的元素。。不确定这是否是你想要的


只有有趣的节点!

我不确定我是否理解您的问题(一个输入和预期输出的小示例将非常有用)。在我看来,您似乎想了解模板优先级:定义“无趣”。为此,请定义“有趣的”。我需要与a/div[@class='location'/br匹配的模板才能工作;这就是有趣的节点。但是catch-all模板匹配
节点()
似乎首先起作用——即,在生效后,a/div/br模板没有可处理的节点。您是否可以编辑您的问题,以显示您的输入HTML示例和本例中预期的输出?谢谢!
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<!-- Lets pretend li is interesting for you -->
<xsl:template match="li">
<xsl:text>Interesting Node Only!
</xsl:text>
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:apply-templates select="@*|node()"/>
</xsl:template>
</xsl:transform>