XSLT转换问题

XSLT转换问题,xslt,xslt-1.0,Xslt,Xslt 1.0,我在尝试转换以下内容时遇到了一个问题。输入具有父子关系,如下所示。Parent\u标识符标记有助于将子项与父项关联起来。XSLT转换的问题是什么?我使用了一个在这篇文章中提到的转换:,但我似乎无法让它工作 输入文件 1. 9536162 1.1.0 2. 9536165 9536162 1.1.1 1554828 2. 9536173 9536162 1.1.7 1554828 3. 1227973 9536165 1.1.4 1554828 3. 1275015 9536165 1.

我在尝试转换以下内容时遇到了一个问题。输入具有父子关系,如下所示。
Parent\u标识符
标记有助于将子项与父项关联起来。XSLT转换的问题是什么?我使用了一个在这篇文章中提到的转换:,但我似乎无法让它工作

输入文件

1.
9536162
1.1.0    
2.
9536165
9536162
1.1.1
1554828
2.
9536173
9536162
1.1.7
1554828
3.
1227973
9536165
1.1.4
1554828
3.
1275015
9536165
1.1.4
1554828
预期输出文件


9536162 1.1.0
1.1.0
9536162 1.1.0级=1
1.1.0
9536165 1.1.1等级=2
1.1.1
1227973 1.1.4等级=3
1.1.4
1275015 1.1.4等级=3
1.1.4
9536173 1.1.7级别=2
1.1.7
下面是我尝试使用的XSLT;为什么这不起作用?
两个编译时错误:

  • tns:前缀未绑定到任何命名空间

  • 您的样式表中的这一行毫无意义

    <xsl:value-of select='concat(/ns0:IDENTIFIER," ",/ns0:LINE_NUMBER," Level=",/ns0:DBAdapterOutput/ns0:LEVEL')'/>
    

    首先,关于代码不可读性的观察——请在以后的问题中提供缩进良好的代码,并用短线

    有一个主要问题很容易纠正

    更改此设置

    <xsl:apply-templates select=
    "ns0:DBAdapterOutputCollection/ns0:DBAdapterOutput
                 [string-length(ns0:PARENT_IDENTIFIER)=0]" />
    
    <xsl:apply-templates select=
    "ns0:DBAdapterOutput
                 [string-length(ns0:PARENT_IDENTIFIER)=0]" />
    
    <?xml version="1.0" encoding="utf-8"?>
    <tns:WMSAssetInterface_Input xmlns:tns="http://siebel.com/CustomUI" xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/db/DBAdapter" xmlns:xsdLocal1="http://www.siebel.com/xml/ThinComergentAsset">
        <xsdLocal1:ListOfAsset>
            <xsdLocal1:ListOfAssetHeader>
                <xsdLocal1:AssetHeader>
                    <xsdLocal1:IntegrationId>9536162 1.1.0 Level=1</xsdLocal1:IntegrationId>
                    <xsdLocal1:ProductName>1.1.0</xsdLocal1:ProductName>
                    <xsdLocal1:ListOfAssetItem>
                        <xsdLocal1:AssetItem>
                            <xsdLocal1:IntegrationId>9536162 1.1.0 Level=1</xsdLocal1:IntegrationId>
                            <xsdLocal1:PartName>1.1.0</xsdLocal1:PartName>
                            <xsdLocal1:ListOfAssetItem>
                                <xsdLocal1:AssetItem>
                                    <xsdLocal1:ListOfAssetItem>
                                        <xsdLocal1:AssetItem>
                                            <xsdLocal1:IntegrationId>9536165 1.1.1 Level=2</xsdLocal1:IntegrationId>
                                            <xsdLocal1:PartName>1.1.1</xsdLocal1:PartName>
                                            <xsdLocal1:ListOfAssetItem>
                                                <xsdLocal1:AssetItem>
                                                    <xsdLocal1:ListOfAssetItem>
                                                        <xsdLocal1:AssetItem>
                                                            <xsdLocal1:IntegrationId>1227973 1.1.4 Level=3</xsdLocal1:IntegrationId>
                                                            <xsdLocal1:PartName>1.1.4</xsdLocal1:PartName>
                                                        </xsdLocal1:AssetItem>
                                                    </xsdLocal1:ListOfAssetItem>
                                                    <xsdLocal1:ListOfAssetItem>
                                                        <xsdLocal1:AssetItem>
                                                            <xsdLocal1:IntegrationId>1275015 1.1.4 Level=3</xsdLocal1:IntegrationId>
                                                            <xsdLocal1:PartName>1.1.4</xsdLocal1:PartName>
                                                        </xsdLocal1:AssetItem>
                                                    </xsdLocal1:ListOfAssetItem>
                                                </xsdLocal1:AssetItem>
                                            </xsdLocal1:ListOfAssetItem>
                                        </xsdLocal1:AssetItem>
                                    </xsdLocal1:ListOfAssetItem>
                                    <xsdLocal1:ListOfAssetItem>
                                        <xsdLocal1:AssetItem>
                                            <xsdLocal1:IntegrationId>9536173 1.1.7 Level=2</xsdLocal1:IntegrationId>
                                            <xsdLocal1:PartName>1.1.7</xsdLocal1:PartName>
                                        </xsdLocal1:AssetItem>
                                    </xsdLocal1:ListOfAssetItem>
                                </xsdLocal1:AssetItem>
                            </xsdLocal1:ListOfAssetItem>
                        </xsdLocal1:AssetItem>
                    </xsdLocal1:ListOfAssetItem>
                </xsdLocal1:AssetHeader>
            </xsdLocal1:ListOfAssetHeader>
        </xsdLocal1:ListOfAsset>
    </tns:WMSAssetInterface_Input>
    

    首先,您已经将tns:前缀绑定到任何名称空间。刚刚更正了编译时错误。谢谢你指出这一点。。但这些错误并不是问题的根源。。我无法确定为什么逻辑会失败。样式表中仍然没有固定。tns:仍然没有绑定。我会在大约6小时后查看它。如果马丁或迪米特里不抢先一步的话。我注意到,在style=sheet中排除了result prefixes=“tns”,这是毫无意义的,因为在序列构造函数中包含了tns:literal元素。
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/db/DBAdapter"
      xmlns:xsdLocal1="http://www.siebel.com/xml/ThinComergentAsset"
      exclude-result-prefixes="xsl xsdLocal1 ns0">
    <xsl:output method="xml" indent="yes"/>
    
    <xsl:template match="/">
     <WMSAssetInterface_Input xmlns="http://siebel.com/CustomUI">
      <ListOfAsset xmlns="http://www.siebel.com/xml/ThinComergentAsset">
       <ListOfAssetHeader>
         <xsl:apply-templates select="*/ns0:DBAdapterOutput[ns0:LEVEL=1]" /> 
       </ListOfAssetHeader>
      </ListOfAsset>
     </WMSAssetInterface_Input>
    </xsl:template>
                
    <xsl:template match="ns0:DBAdapterOutput[ns0:LEVEL=1]"
      xmlns="http://www.siebel.com/xml/ThinComergentAsset">
      <AssetHeader>
        <IntegrationId>
          <xsl:value-of select="concat(ns0:IDENTIFIER,' ',ns0:LINE_NUMBER)" /> 
        </IntegrationId>
        <ProductName>
          <xsl:value-of select="ns0:LINE_NUMBER" />
        </ProductName>
        <ListOfAssetItem>
          <xsl:apply-templates select="../ns0:DBAdapterOutput
                    [           ns0:LEVEL=
                     (current()/ns0:LEVEL+1)]" /> 
        </ListOfAssetItem>
      </AssetHeader>
    </xsl:template>
        
    <xsl:template match="ns0:DBAdapterOutput[ns0:LEVEL &gt; 1]"
          xmlns="http://www.siebel.com/xml/ThinComergentAsset">
      <AssetItem>
        <IntegrationId>
          <xsl:value-of select="concat(ns0:IDENTIFIER,' ',ns0:LINE_NUMBER,
          ' Level=', ns0:LEVEL/text()-1)" /> 
        </IntegrationId>
        <ProductName>
          <xsl:value-of select="ns0:LINE_NUMBER" />
        </ProductName>
        <xsl:if test="../ns0:DBAdapterOutput
                    [ns0:PARENT_IDENTIFIER = current()/ns0:IDENTIFIER]">
         <ListOfAssetItem>
          <xsl:apply-templates select="../ns0:DBAdapterOutput
                    [ns0:PARENT_IDENTIFIER = current()/ns0:IDENTIFIER]" /> 
         </ListOfAssetItem>
        </xsl:if>
      </AssetItem>
    </xsl:template>
        
    </xsl:stylesheet>
        
    
    <WMSAssetInterface_Input xmlns="http://siebel.com/CustomUI">
      <ListOfAsset xmlns="http://www.siebel.com/xml/ThinComergentAsset">
        <ListOfAssetHeader>
          <AssetHeader>
            <IntegrationId>9536162 1.1.0</IntegrationId>
            <ProductName>1.1.0</ProductName>
            <ListOfAssetItem>
              <AssetItem>
                <IntegrationId>9536165 1.1.1 Level=1</IntegrationId>
                <ProductName>1.1.1</ProductName>
                <ListOfAssetItem>
                  <AssetItem>
                    <IntegrationId>1227973 1.1.4 Level=2</IntegrationId>
                    <ProductName>1.1.4</ProductName>
                  </AssetItem>
                  <AssetItem>
                    <IntegrationId>1275015 1.1.4 Level=2</IntegrationId>
                    <ProductName>1.1.4</ProductName>
                  </AssetItem>
                </ListOfAssetItem>
              </AssetItem>
              <AssetItem>
                <IntegrationId>9536173 1.1.7 Level=1</IntegrationId>
                <ProductName>1.1.7</ProductName>
              </AssetItem>
            </ListOfAssetItem>
          </AssetHeader>
        </ListOfAssetHeader>
      </ListOfAsset>
    </WMSAssetInterface_Input>
    
    <xsl:apply-templates select=
    "ns0:DBAdapterOutputCollection/ns0:DBAdapterOutput
                 [string-length(ns0:PARENT_IDENTIFIER)=0]" />
    
    <xsl:apply-templates select=
    "ns0:DBAdapterOutput
                 [string-length(ns0:PARENT_IDENTIFIER)=0]" />
    
    <?xml version="1.0" encoding="utf-8"?>
    <tns:WMSAssetInterface_Input xmlns:tns="http://siebel.com/CustomUI" xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/db/DBAdapter" xmlns:xsdLocal1="http://www.siebel.com/xml/ThinComergentAsset">
        <xsdLocal1:ListOfAsset>
            <xsdLocal1:ListOfAssetHeader>
                <xsdLocal1:AssetHeader>
                    <xsdLocal1:IntegrationId>9536162 1.1.0 Level=1</xsdLocal1:IntegrationId>
                    <xsdLocal1:ProductName>1.1.0</xsdLocal1:ProductName>
                    <xsdLocal1:ListOfAssetItem>
                        <xsdLocal1:AssetItem>
                            <xsdLocal1:IntegrationId>9536162 1.1.0 Level=1</xsdLocal1:IntegrationId>
                            <xsdLocal1:PartName>1.1.0</xsdLocal1:PartName>
                            <xsdLocal1:ListOfAssetItem>
                                <xsdLocal1:AssetItem>
                                    <xsdLocal1:ListOfAssetItem>
                                        <xsdLocal1:AssetItem>
                                            <xsdLocal1:IntegrationId>9536165 1.1.1 Level=2</xsdLocal1:IntegrationId>
                                            <xsdLocal1:PartName>1.1.1</xsdLocal1:PartName>
                                            <xsdLocal1:ListOfAssetItem>
                                                <xsdLocal1:AssetItem>
                                                    <xsdLocal1:ListOfAssetItem>
                                                        <xsdLocal1:AssetItem>
                                                            <xsdLocal1:IntegrationId>1227973 1.1.4 Level=3</xsdLocal1:IntegrationId>
                                                            <xsdLocal1:PartName>1.1.4</xsdLocal1:PartName>
                                                        </xsdLocal1:AssetItem>
                                                    </xsdLocal1:ListOfAssetItem>
                                                    <xsdLocal1:ListOfAssetItem>
                                                        <xsdLocal1:AssetItem>
                                                            <xsdLocal1:IntegrationId>1275015 1.1.4 Level=3</xsdLocal1:IntegrationId>
                                                            <xsdLocal1:PartName>1.1.4</xsdLocal1:PartName>
                                                        </xsdLocal1:AssetItem>
                                                    </xsdLocal1:ListOfAssetItem>
                                                </xsdLocal1:AssetItem>
                                            </xsdLocal1:ListOfAssetItem>
                                        </xsdLocal1:AssetItem>
                                    </xsdLocal1:ListOfAssetItem>
                                    <xsdLocal1:ListOfAssetItem>
                                        <xsdLocal1:AssetItem>
                                            <xsdLocal1:IntegrationId>9536173 1.1.7 Level=2</xsdLocal1:IntegrationId>
                                            <xsdLocal1:PartName>1.1.7</xsdLocal1:PartName>
                                        </xsdLocal1:AssetItem>
                                    </xsdLocal1:ListOfAssetItem>
                                </xsdLocal1:AssetItem>
                            </xsdLocal1:ListOfAssetItem>
                        </xsdLocal1:AssetItem>
                    </xsdLocal1:ListOfAssetItem>
                </xsdLocal1:AssetHeader>
            </xsdLocal1:ListOfAssetHeader>
        </xsdLocal1:ListOfAsset>
    </tns:WMSAssetInterface_Input>