xml - 每次选择的 Xpath
问题描述
我有以下结构的 XML 文件
<root>
<Row>
<KeyName>A</KeyName>
.....
</Row>
<Row>
<KeyName>B</KeyName>
.....
</Row>
<Row>
<KeyName>A</KeyName>
.....
</Row>
<Row>
<KeyName>B</KeyName>
.....
</Row>
<Row>
<KeyName>C</KeyName>
.....
</Row>
</root>
我想为 xml-fo 转换发表声明
我需要对所有 KeyNames 进行循环,但每个 KeyName 只有一次。我的问题是,我不知道将使用哪些 KeyName 以及它们出现的频率。树的结构/深度是恒定的。
目标:
Block KeyName/text()=A
Row data
Row data
Row data
..
Block KeyName/text()=B
Row data
Row data
..
对所有现有的(但未知的)KeyNames 继续。
解决方案
也许它可以帮助其他人。经过一些测试和更多研究,我发现了一个名为“Muenchian grouping”的例程。我尝试了不同的示例,直到找到合适的示例。下面你会找到 xslt 转换文件的代码,它引用了我的问题的数据。
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" />
<xsl:key name="RowbyKeyName" match="Row" use="KeyName" />
<xsl:template match="root">
<ul>
<xsl:for-each select="Row[generate-id() = generate-id(key('RowbyKeyName', KeyName)[1])]" >
<li>
KeyName: <xsl:value-of select="KeyName" />
<ul>
<xsl:for-each select="key('RowbyKeyName', KeyName)" >
<li>
<xsl:value-of select="..." />
....
Row Data
....
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- c# - msbuild 失败,缺少类型或命名空间名称
- jenkins - GCE 上的 Jenkins - 将 Google Cloud Function 部署到不同的 GCP 项目
- voice - sox.core.SoxError: Stdout: Stderr: sox FAIL formats: 'XXX': WAVE: RIFF header not found when processing voice files from wxrobot
- android - 使用位图将图像文件转换为字节数组
- node.js - 反应应用程序未在具有不同节点和 npm 的计算机上启动
- python-3.x - 如何使用 selenium 和 python 将 Tab 键输入发送到 Web 浏览器
- python - 可迭代对象是原始对象的副本吗?
- php - Apache 和 PHP - 我的服务器返回一个空响应而没有告诉我原因
- postgresql - 为同一数据库服务器上的多个数据库创建连接池(Spring Boot)
- javascript - 使用 Ramda 的地图和深度对象