问题描述
我有一个基于 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>
解决方法
适用于以下 XML 的以下 XSL 有效。 首先,我对客户进行分组(关键功能)。我正在考虑“:”之前的所有内容都是客户编号。
之后,对于分组内的每个实例,我测试 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',':'))">
<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>