xml用xsl实现分类排版的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xml用xsl实现分类排版的问题相关的知识,希望对你有一定的参考价值。

xml文档有如下结构
<a>
<b>123</b>
<class>A</class>
</a>
<a>
<b>234</b>
<class>A</class>
</a>
<a>
<b>567</b>
<class>B</class>
</a>
<a>
<b>789</b>
<class>B</class>
</a>

主义class元素。我想实现的就是用xsl实现如下:
class:A
b:123
b:234
class:B
b:567
b:789

参考技术A 1 Beta 8 8998年88月 支持双向文字、旁注标记、XML/XSL及更多CSS的属性 * 8.1 8999年8月 正式发布 Wind... 排版引擎,几乎完整支持html 8.18,CSS Level 8,XML 8.1和DOM Level 8,只是有一些排版错误。它亦部分支...

使用 xsl 时 CDATA 未包含在我的 XML 中

【中文标题】使用 xsl 时 CDATA 未包含在我的 XML 中【英文标题】:CDATA not included in my XML when using xsl 【发布时间】:2022-01-07 20:51:16 【问题描述】:

我目前正在做一个小项目,通过 VBA 将数据从 MS Access 导出为 XML 格式。我有一个部分应该在其中添加带有 CDATA 标记的代码。 但是,当我尝试实现它时,我的代码中缺少 CDATA 部分。这是我到目前为止所得到的:

 Dim doc As New MSXML2.DOMDocument60
 Dim rulescript As IXMLDOMElement
 Dim code As IXMLDOMElement
 Dim cdata As IXMLDOMCDATASection

 'Append ruleScript 
 Set rulescript = doc.createElement("ruleScript")
 doc.appendChild rulescript

 'Append code
 Set code = doc.createElement("code")
 rulescript.appendChild code
        
 'Create code and append it as CDATA section
 Set cdata = doc.createCDATASection("code")
 cdata.Data = "this is a dummy code."
 code.appendChild cdata

XLS:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"
cdata-section-elements="code" encoding="UTF-8"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

这就是它的样子:

<ruleScript>
     <code><![CDATA[this is a dummy code.]]></code>
</ruleScript>

但不幸的是,结果是这样的,没有 CDATA:

<ruleScript>
     <code>this is a dummy code.</code>
</ruleScript>

我环顾四周,找不到我的解决方案,因此我将不胜感激。

编辑: 看了一会儿,我意识到问题不是代码的实现。问题是我用来保存文档的xsl:

出于某种原因,如果我只使用

Debug.Print doc.XML

,它工作得很好。我还没弄清楚为什么会这样。

【问题讨论】:

rootNode 只是我之前创建的另一个节点。我没有意识到这可能会引起混乱。我会编辑它 这对我有用:Debug.Print doc.XML 给了&lt;ruleScript&gt;&lt;code&gt;&lt;![CDATA[this is a dummy code.]]&gt;&lt;/code&gt;&lt;/ruleScript&gt; 和蒂姆一样,我试过doc.Save,结果文件也是正确的。如果你只使用这段代码,你会遇到同样的问题吗? 哦,如果我只使用块代码,它也适用于我。我想它一定是其他的东西不起作用。 我不熟悉 XML(事实上,我几乎不使用它们!)所以一个快速的谷歌给出了this。您可能想要更新您的问题标题以更好地反映您当前的问题。 @咪咪 【参考方案1】:

当需要 CDATA 部分时,您需要添加控制 XML 元素值的 cdata-section-elements 属性。它是一个空格分隔的列表,因此您可以添加任意数量的元素名称。

检查一下。

<xsl:output method="xml" indent="yes" cdata-section-elements="code" encoding="utf-8" />

【讨论】:

我添加了cdata-section-elements="code",但它似乎仍然不起作用。 不再需要在 VBA 中使用 `Set cdata = doc.createCDATASection("code")'。现在这是 XSLT 的职责。

以上是关于xml用xsl实现分类排版的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 xsl 时 CDATA 未包含在我的 XML 中

利用xslt与xml实现具体字段字母的大小写转换

我需要一个简单的命令行程序来使用 XSL 样式表转换 XML [关闭]

简述XML,DTD,XSL,CSS,DSO,DOM各是啥东西

XML -> XSL -> HTML 编辑文件,并在没有 asp 的情况下保存 xml 中的更改

XML XSD XSL区别与联系