xslt - 基于节点变量增量 xml 中的值的 xml 的 xslt 转换
问题描述
我有一个基于 java 的应用程序将数据输入到一个表中,其中的列按名称 fieldName 及其 fieldValue 我试图以数组格式重新分组以供其他用途我尝试使用 for-each 在客户之后和之前获取子字符串:但它的不能那样工作 输入:
<Data>
<fieldName>customer0:fname</fieldName>
<fieldValue>fremont</fieldValue>
</Data>
<Data>
<fieldName>customer0:mname<</fieldName>
<fieldValue>u</fieldValue>
</Data>
<Data>
<fieldName>customer0:Lname<</fieldName>
<fieldValue>usa</fieldValue>
</Data>
<Data>
<fieldName>customer1:fname</fieldName>
<fieldValue>Hyd</fieldValue>
</Data>
<Data>
<fieldName>customer1:mname<</fieldName>
<fieldValue>M</fieldValue>
</Data>
<Data>
<fieldName>customer1:Lname<</fieldName>
<fieldValue>india</fieldValue>
</Data>
OUTPUT:
I am trying to convert this into below format
<responsexml>
<ResponseList>
<firstname>fremont</firstname>
<middlename>u</middlename>
<lastname>usa</lastname>
</ResponseList>
<ResponseList>
<firstname>hyd</firstname>
<middlename>M</middlename>
<lastname>india</lastname>
</ResponseList>
</responsexml>
解决方案
以下 XSL 应用于以下 XML 作品。首先,我对客户进行分组(关键功能)。我正在考虑“:”之前的所有内容都是客户编号。
之后,对于分组内的每个实例,我测试 fieldName 以检查它是名字、姓氏还是中间名(所有选项),然后将值添加到正确的节点。
XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsl:key name="Customer" match="Data" use="substring-before(fieldName, ':')" />
<xsl:template match="root">
<responsexml>
<xsl:for-each select="Data[generate-id() = generate-id(key('Customer', substring-before(fieldName, ':'))[1])]">
<ResponseList>
<xsl:for-each select="key('Customer', substring-before(fieldName, ':'))">
<xsl:choose>
<xsl:when test="substring-after(fieldName, ':') = 'fname'">
<firstname>
<xsl:value-of select="fieldValue"/>
</firstname>
</xsl:when>
<xsl:when test="substring-after(fieldName, ':') = 'mname'">
<middlename>
<xsl:value-of select="fieldValue"/>
</middlename>
</xsl:when>
<xsl:when test="substring-after(fieldName, ':') = 'Lname'">
<lastname>
<xsl:value-of select="fieldValue"/>
</lastname>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</ResponseList>
</xsl:for-each>
</responsexml>
</xsl:template>
</xsl:stylesheet>
XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<Data>
<fieldName>customer0:fname</fieldName>
<fieldValue>fremont</fieldValue>
</Data>
<Data>
<fieldName>customer0:mname</fieldName>
<fieldValue>u</fieldValue>
</Data>
<Data>
<fieldName>customer0:Lname</fieldName>
<fieldValue>usa</fieldValue>
</Data>
<Data>
<fieldName>customer1:fname</fieldName>
<fieldValue>Hyd</fieldValue>
</Data>
<Data>
<fieldName>customer1:mname</fieldName>
<fieldValue>M</fieldValue>
</Data>
<Data>
<fieldName>customer1:Lname</fieldName>
<fieldValue>india</fieldValue>
</Data>
</root>
推荐阅读
- firebase - 如何在 Firebase 上创建自定义扩展?
- r - 提取 tiff 数据时出现模糊的警告消息
- unix - 获取最新修改的文件并从修改的文件中计算行数
- nestjs - 客户端是带有 NgRx-Data 的 Angular 8;服务器是 NestJs + MySQL。如何使用条件和 SQL 获取数据?
- postgresql - 执行函数 pg_ls_dir 的权限
- javascript - .then 链后变量被重置
- python-3.x - 比较一致性值,熊猫数据框
- javascript - fetch().then/fetch 不同?
- python - django 无法显示模板 - 如何修复
- asp.net - Razor 运行时编译