- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的输入 XML 包含页眉、内容和页 footer 分。使用 XSLT 从 XML 到 JSON 的转换效果很好。但我需要将输出分为三个部分,即页眉、内容和页脚:
我的输入 XML 文件是:
<header>
<trackingSettings>
<urlcode>W3333</urlcode>
<apiurl>http://mlucenter.com/like/api</apiurl>
</trackingSettings>
</header>
<mlu3_body>
<columnsCount>2</columnsCount>
<lineBackground>linear-gradient(to right, rgba(94, 172, 192, 0) 0%, c4cccf 50%, rgba(94, 172, 192, 0) 100%)</lineBackground>
</mlu3_body>
<footer>
<buttons>
<button/>
</buttons>
<banner/>
</footer>
我的 XSLT 使用:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" method="xml" />
<xsl:template match="*">
<xsl:value-of select="name()"/> : <xsl:call-template name="Properties"/>
</xsl:template>
<xsl:template match="*" mode="ArrayElement">
<xsl:call-template name="Properties"/>
</xsl:template>
<xsl:template name="Properties">
<xsl:variable name="childName" select="name(*[1])"/>
<xsl:choose>
<xsl:when test="not(*|@*)">"<xsl:value-of select="."/>"</xsl:when>
<xsl:when test="count(*[name()=$childName]) > 1">{ "<xsl:value-of select="$childName"/>" :[<xsl:apply-templates select="*" mode="ArrayElement"/>] }</xsl:when>
<xsl:otherwise>{
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="*"/>
}</xsl:otherwise>
</xsl:choose>
<xsl:if test="following-sibling::*">,</xsl:if>
</xsl:template>
<xsl:template match="@*">"<xsl:value-of select="name()"/>" : '<xsl:value-of select="."/>',
</xsl:template>
</xsl:stylesheet>
这里我在氧气中使用 Saxon PE:
我想将此 XML 转换为 3 个 JSON 文件,分别名为 header.json
、content.json
(mlu3_body) 和 footer.json
输出。
这是否可以通过使用 XSLT 实现,还是我想单独保留所有输入文件。请提供一些想法。
最佳答案
将 XSLT 更改为
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="*">
<xsl:value-of select="name()"/> : <xsl:call-template name="Properties"/>
</xsl:template>
<xsl:template match="*" mode="ArrayElement">
<xsl:call-template name="Properties"/>
</xsl:template>
<xsl:template name="Properties">
<xsl:variable name="childName" select="name(*[1])"/>
<xsl:choose>
<xsl:when test="not(*|@*)">"<xsl:value-of select="."/>"</xsl:when>
<xsl:when test="count(*[name()=$childName]) > 1">{ "<xsl:value-of select="$childName"/>" :[<xsl:apply-templates select="*" mode="ArrayElement"/>] }</xsl:when>
<xsl:otherwise>{
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="*"/>
}</xsl:otherwise>
</xsl:choose>
<xsl:if test="following-sibling::*">,</xsl:if>
</xsl:template>
<xsl:template match="@*">"<xsl:value-of select="name()"/>" : '<xsl:value-of select="."/>',
</xsl:template>
<xsl:template match="header">
<xsl:result-document href="header.json">
<xsl:next-match/>
</xsl:result-document>
</xsl:template>
<xsl:template match="mlu3_body">
<xsl:result-document href="content.json">
<xsl:next-match/>
</xsl:result-document>
</xsl:template>
<xsl:template match="footer">
<xsl:result-document href="footer.json">
<xsl:next-match/>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
它应该为这三个元素生成三个结果文件。如果生成的内容还不太正确,您将不得不编辑您的问题并准确告诉我们您想要的结果。也不清楚您显示的 XML 片段是否是更大文档的一部分。
关于css - 如何在 Oxygen 中使用 XSLT 从单个 XML 文件拆分为 3 个 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886895/
我了解到每个 Xpath 表达式也是一个有效的 Xquery 表达式。我将 Oxygen 16.1 与此示例 XML 结合使用: Anderson, Jeff Bishop, Kev
我遇到了一个问题,它是Eclipse Oxygen 中的黑色背景颜色工具提示。我用谷歌搜索过这个问题,但我只找到了 linux 的解决方案。我在 Windows 中使用 Eclipse。请帮我解决这个
我正试图通过这个遗留的 Delphi Prism 应用程序找到出路。我以前从未使用过 Delphi Prism。 如何将流类型转换为字节数组类型?由于我不了解 Delphi Prism,请提供详细的代
在Delphi中,有一个函数StrToInt()可以将字符串转换为整数值;还有 IntToStr(),它的作用相反。这些功能似乎不是 Oxygene 的一部分,而且我找不到可以做到这一点的引用。怎么办
我正试图通过这个遗留的 Delphi Prism 应用程序找到出路。我以前从未使用过 Delphi Prism。 如何将流类型转换为字节数组类型?由于我不了解 Delphi Prism,请提供详细的代
我的 Eclipse (Oxygen) 工作区中有 3 个 Java 项目。这些项目是 A、B 和 Utils。 A 和 B 都使用 Utils 项目。如果我进入其中任何一个项目的 Java 构建路径
我已经下载了适用于 Android 的 TeeChart 评估版,我想在使用 RemObjects Oxygene 开发的应用程序中使用它。 如果我使用默认模板创建一个简单的 hello world
我知道 CodeGear 制作 BabelCode它使用 Code DOM 将 C# 转换为 Delphi for .NET。我很好奇是否还有其他类似的工具可以将 C# 转换为 Delphi Pris
我正在尝试学习 JAVA 中模块的新概念。我正在使用 Eclipse oxygen 4.7.3a 和 JDK 11.0.1。 我的 module-info.java 文件收到语法错误警告。编译器似乎无
我为 PHP 安装了 Eclipse 的最新版本 (Oxygen)。但是现在有很多我认为不应该的错误注释。 几乎所有这些都与异常有关: throw new Exception('Exception m
我已将 Eclipse 升级到 Oxygen,并添加了 Scala 和 Python。我注意到在用 Java 编程时,调试器的步骤命令保持禁用状态。 我可以运行调试器,它会一直运行直到遇到断点,但是我
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
这个问题确实与Delphi XE2功能有关,但是由于这种跨平台的东西是新的(尤其是Oxygene Java),所以我很好奇是否有人试图使用XE2工具链从一个Delphi / C ++代码库中针对所有4
自从将Eclipse从Neon更新为Oxygen以来,我在调试代码时遇到了“F6-Step Over”功能。每次我使用“Step Over”并且当前行包含一个方法调用时,我都会进入该方法(“F5-St
我正在使用 eclipse 氧气,并且试图在build.gradle文件上运行Gradle Buid。我已经安装了Buildship Gradle Integration 2.0,并且还配置了依赖项。
这个问题已经有答案了: How to disable breadcrumbs in Eclipse (11 个回答) 已关闭 5 年前。 我不小心打开了这个层次结构/目录,或者我的 eclipse 氧
这个问题已经有答案了: How to disable breadcrumbs in Eclipse (11 个回答) 已关闭 5 年前。 我的最新 Eclipse 安装中出现了这个白色条(位于所有开放
当我尝试打开 Eclipse Java Oxygen 它一直给我这个错误 C:\Program Files\Java\jre1.8.0_152\lib\amd64\jvm.cfg 我的jre是 jr
我正在为 Eclipse Oxygen 编写一个插件,它允许直接从工具栏按钮运行外部工具。当我右键单击该项目并单击 Run As Eclipse Application 时,出现一个显示以下错误的弹出
我最近切换到 Eclipse Oxygen(Build id:20171005-1200),我的主观意见是 Java 代码完成似乎比我使用 Eclipse Luna 时更笨。我希望这只是与我的设置有关
我是一名优秀的程序员,十分优秀!