xml - XML - XSLT - 保留输入 XML 文档的一部分
问题描述
我有这个输入 XML 文档:
<?xml version="1.0" encoding="UTF-8"?>
<jasperPrint xmlns="http://jasperreports.sourceforge.net/jasperreports/print"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/print http://jasperreports.sourceforge.net/xsd/jasperprint.xsd">
<page>
<firstElement>Some Data</firstElement>
<secondElement name="2ndElement">
<subElement id="1SE">
<firstChild name="1st"/>
<secondChild>DATA I WANT TO KEEP 1</secondChild>
</subElement>
<subElement id="1SE">
<firstChild name="1st"/>
<secondChild>DATA I WANT TO KEEP 2</secondChild>
</subElement>
<subElement id="1SE">
<firstChild name="1st"/>
<secondChild>DATA I WANT TO KEEP 3</secondChild>
</subElement>
<subElement id="1SE">
<firstChild name="1st"/>
<secondChild>DATA I WANT TO KEEP 4</secondChild>
</subElement>
</secondElement>
</page>
</jasperPrint>
使用 XSLT,我想对其进行转换,以便只保留<secondChild>
元素,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<secondChildList>
<secondChild>DATA I WANT TO KEEP 1</secondChild>
<secondChild>DATA I WANT TO KEEP 2</secondChild>
<secondChild>DATA I WANT TO KEEP 3</secondChild>
<secondChild>DATA I WANT TO KEEP 4</secondChild>
</secondChildList>
这是我正在尝试的 XSLT 代码:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://jasperreports.sourceforge.net/jasperreports/print"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/print http://jasperreports.sourceforge.net/xsd/jasperprint.xsd">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="jasperPrint/page/secondElement">
<secondChildList>
<xsl:for-each select="subElement">
<secondChild>
<xsl:value-of select="secondChild"/>
</secondChild>
</xsl:for-each>
</secondChildList>
</xsl:template>
</xsl:stylesheet>
这只是输出输入 XML 文档中的文本,如下所示:
<?xml version="1.0" encoding="UTF-8"?>Some DataDATA I WANT TO KEEP 1DATA I WANT TO KEEP 2DATA I WANT TO KEEP 3DATA I WANT TO KEEP 4
如何使用 XSLT 实现我想要的输出 XML 文档?
谢谢!
亚历山大·哈辛托
解决方案
实现这一点的最简单的样式表可能是:
<secondChildList xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:copy-of select="//secondChild"/>
</secondChildList>
试试看。没有包装器的简化样式表xsl:stylesheet
对于像这样的简单工作非常方便。但是如果你想添加类似 xsl:output 的东西,那么你需要完整的语法:
<xsl:stylesheet xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<secondChildList>
<xsl:copy-of select="//secondChild"/>
</secondChildList>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- ruby - 如何在正则表达式中强制执行顺序?
- python - 替换列表中第一次出现的字符串元素
- javascript - 将数组对象字段数据添加到javascript中的单个对象
- r - 一系列数字的比例 = >1
- ruby-on-rails - Redmine 花时间跟踪限制
- angularjs - 使用 bower 如何改进我的网页的首次下载
- javascript - ReactJs无法访问状态字典
- python - 根据熊猫中的值获取列索引
- elasticsearch - 在弹性搜索索引中添加父类型而不更新其现有文档
- javascript - vue js中的对象HTMLTextAreaElement