xslt - 嵌套变换
问题描述
我尝试对以下 XML 执行转换:
<?xml version="1.0" encoding="UTF-8"?>
<A_Example>
<A_ExampleType>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleType>
<A_ExampleType>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleType>
<A_ExampleType>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
<to_ExampleChild>
<A_ExampleChildType>
<RandomChildData1></RandomChildData1>
<RandomChildData2></RandomChildData2>
<RandomChildData3></RandomChildData3>
<RandomChildData4></RandomChildData4>
<RandomChildData5></RandomChildData5>
<RandomChildData6></RandomChildData6>
<to_ExampleArea>
<A_ExampleAreaType>
<RandomAreaData1></RandomAreaData1>
<RandomAreaData2></RandomAreaData2>
<RandomAreaData3></RandomAreaData3>
<RandomAreaData4></RandomAreaData4>
<RandomAreaData5></RandomAreaData5>
<RandomAreaData6></RandomAreaData6>
</A_ExampleAreaType>
</to_ExampleArea>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleChildType>
</to_ExampleChild>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleType>
<A_ExampleType>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
<to_ExampleChild>
<A_ExampleChildType>
<RandomChildData1></RandomChildData1>
<RandomChildData2></RandomChildData2>
<RandomChildData3></RandomChildData3>
<RandomChildData4></RandomChildData4>
<RandomChildData5></RandomChildData5>
<RandomChildData6></RandomChildData6>
<to_ExampleArea>
<A_ExampleAreaType>
<RandomAreaData1></RandomAreaData1>
<RandomAreaData2></RandomAreaData2>
<RandomAreaData3></RandomAreaData3>
<RandomAreaData4></RandomAreaData4>
<RandomAreaData5></RandomAreaData5>
<RandomAreaData6></RandomAreaData6>
</A_ExampleAreaType>
</to_ExampleArea>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleChildType>
</to_ExampleChild>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleType>
</A_Example>
我想实现以下输出:
<A_Example>
<A_ExampleType>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleType>
<A_ExampleType>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleType>
<A_ExampleType>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
<RandomChildData1></RandomChildData1
<RandomChildData2></RandomChildData2>
<RandomChildData3></RandomChildData3>
<RandomChildData4></RandomChildData4>
<RandomChildData5></RandomChildData5>
<RandomChildData6></RandomChildData6>
<RandomAreaData1></RandomAreaData1>
<RandomAreaData2></RandomAreaData2>
<RandomAreaData3></RandomAreaData3>
<RandomAreaData4></RandomAreaData4>
<RandomAreaData5></RandomAreaData5>
<RandomAreaData6></RandomAreaData6>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleType>
<A_ExampleType>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
<RandomChildData1></RandomChildData1>
<RandomChildData2></RandomChildData2>
<RandomChildData3></RandomChildData3>
<RandomChildData4></RandomChildData4>
<RandomChildData5></RandomChildData5>
<RandomChildData6></RandomChildData6>
<RandomAreaData1></RandomAreaData1>
<RandomAreaData2></RandomAreaData2>
<RandomAreaData3></RandomAreaData3>
<RandomAreaData4></RandomAreaData4>
<RandomAreaData5></RandomAreaData5>
<RandomAreaData6></RandomAreaData6>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
<RandomData1></RandomData1>
<RandomData2></RandomData2>
<RandomData3></RandomData3>
<RandomData4></RandomData4>
<RandomData5></RandomData5>
<RandomData6></RandomData6>
</A_ExampleType>
</A_Example>
简而言之,我想要一个没有嵌套节点的平面结构。我尝试使用以下 XSLT 进行处理,但并没有走得太远。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/A_Example">
<test>
<xsl:for-each select="//A_ExampleType">
<hallo>
<xsl:value-of select="."></xsl:value-of>
</hallo>
</xsl:for-each>
</test>
</xsl:template>
</xsl:stylesheet>
如果我运行我的代码,我会得到整个数据以及来自所有节点的数据,但没有声明。有了这个,我的意思是我得到了这样的东西。
运行 XSLT 代码之前的 XML:
<RandomData1>Test12345</RandomData1>
运行 XSLT 代码后的 XML 我只得到:
Test12345
为什么会发生这种情况,我怎样才能取回声明?
解决方案
当您只想要从第二个嵌套级别( A_ExampleType )开始的“叶”节点(没有子节点的节点)时,我会建议以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/A_Example">
<xsl:copy>
<xsl:for-each select="A_ExampleType">
<xsl:copy>
<xsl:copy-of select="descendant::*[not(child::*)]"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- nginx - CentOS 7 - NGINX - DNS 负载均衡
- google-cloud-storage - 在 Google Cloud Storage 的子文件夹中托管静态 Sapper 站点
- r - 在 drake 中使用 code_to_plan 和 target(..., format = "fst")
- excel - 将活动行从一个表剪切并粘贴到不同工作表上的另一个表
- python - 需要有关用户输入的蛇程序帮助
- amazon-web-services - 有没有办法使用 Lambda 函数在 Amazon EFS 上存储文件?
- angular - Angular2 jwt auth 通过子模块中的拦截器
- sql - 网站分析数据的存储 - 关系还是时间序列?
- mysql - .on("ready") 用mysql定义公会ID
- javascript - Vuetify fab 无法在 Firebase 上托管的 Vue.js 应用程序中正确呈现