XSL以获得与XML元素中完全相同的html代码
这里是XML/XSL新手,请原谅我的无知。这是给我的xml输入:XSL以获得与XML元素中完全相同的html代码,xml,xslt,Xml,Xslt,这里是XML/XSL新手,请原谅我的无知。这是给我的xml输入: <entry> <desc> <p>Lorem ipsum <a href="http://www.google.com">dolor</a> sit amet.</p> <p>Lorem <strong>ipsum</strong> dolor sit amet.</p>
<entry>
<desc>
<p>Lorem ipsum <a href="http://www.google.com">dolor</a> sit amet.</p>
<p>Lorem <strong>ipsum</strong> dolor sit amet.</p>
</desc>
</entry>
我假设我的系统上一定有其他xsl样式表可以这样做,对吗?在任何情况下,我都没有对它们进行读取和编辑访问,我只能添加一个新的样式表,因此为了解决这个问题,我使用了以下方法:
<xsl:for-each select="desc/*">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
这至少让我明白:
<p>Lorem ipsum dolor sit amet.</p><p>Lorem ipsum dolor sit amet.</p>
Lorem ipsum door sit amet.Lorem ipsum door sit amet
然而,正如你所看到的,链接和格式已经消失了,再见!我无法控制添加到其中的html元素的种类。有人能建议一种保存格式和所有desc元素的方法吗?该引擎仅为XSL 1。提前谢谢 您需要复制
desc
下的元素及其所有子元素。XSL元素将为您执行以下操作:
<xsl:copy-of select="desc/node()"/>
这将复制
desc
的所有子元素,包括文本节点及其任何子元素。您需要复制desc
下的元素及其所有子元素。XSL元素将为您执行以下操作:
<xsl:copy-of select="desc/node()"/>
这将复制desc
的所有子元素,包括文本节点及其任何子元素。请尝试以下操作:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/entry/desc">
<xsl:copy-of select="@*|node()"/>
</xsl:template>
</xsl:stylesheet>
试试这个:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/entry/desc">
<xsl:copy-of select="@*|node()"/>
</xsl:template>
</xsl:stylesheet>
您的选择不正确 选择=“desc” 或 选择=“/entry/desc” 发件人: nodename选择命名节点的所有子节点 /从根节点中选择 //从当前节点中选择文档中与选择号匹配的节点 不管他们在哪里 。选择当前节点 。。选择当前节点的父节点
@选择属性您的选择不正确 选择=“desc” 或 选择=“/entry/desc” 发件人: nodename选择命名节点的所有子节点 /从根节点中选择 //从当前节点中选择文档中与选择号匹配的节点 不管他们在哪里 。选择当前节点 。。选择当前节点的父节点
@选择属性,除非您确定
只包含元素(没有混合内容),否则我建议使用“desc/node()”
,它将同时抓取元素和文本节点。@Ben Blank:示例中只有元素,但您的观点是有效的。我将把它添加到我的答案中。谢谢!我明天会在工作中尝试,看看它是否提供了所需的输出。我要补充的是,这是正确答案的原因是xsl:value of将返回所有子节点的文本值,这就是为什么您只获得Lorem Ipsum而没有标记的原因。xsl:copy of将复制节点及其文本。谢谢各位,今天才有时间尝试,效果非常好!也非常感谢单簧管的解释,这很有道理!除非您确定
只包含元素(没有混合内容),否则我建议改用的“desc/node()”
,它将同时抓取元素和文本节点。@Ben Blank:示例中只有元素,但您的观点是有效的。我将把它添加到我的答案中。谢谢!我明天会在工作中尝试,看看它是否提供了所需的输出。我要补充的是,这是正确答案的原因是xsl:value of将返回所有子节点的文本值,这就是为什么您只获得Lorem Ipsum而没有标记的原因。xsl:copy of将复制节点及其文本。谢谢各位,今天才有时间尝试,效果非常好!也非常感谢单簧管的解释,这很有道理!他的选择器显然是对的,否则他将根本得不到输出。更可能的是,他只是为每个或模板
声明省略了,这些声明为他的代码片段建立了上下文。为了简洁起见,我省略了“entry”模板声明,但我的select确实获得了desc元素的值,由于我不知道的原因,他删除了所有的格式。他的选择器显然是正确的,否则他将无法得到任何输出。更可能的是,他只是为每个
或模板
声明省略了,这些声明为他的代码片段建立了上下文。为了简洁起见,我省略了“entry”模板声明,但我的select确实获得了desc元素的值,由于我不知道的原因,我刚刚删除了所有的格式。我已经在一个模板中了,为了简洁起见,我省略了这个模板。select的@*|node()部分在这样的模板中工作吗?我承认我对它的含义感到困惑。我已经在一个模板中,为了简洁起见,我省略了这个模板。select的@*|node()部分在这样的模板中工作吗?我承认我不知道这意味着什么。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/entry/desc">
<xsl:copy-of select="@*|node()"/>
</xsl:template>
</xsl:stylesheet>