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;为什么这不起作用?
两个编译时错误:
<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 > 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>