微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于节点变量增量xml中的值对xml进行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>


解决方法

适用于以下 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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。