我的XML是这样的:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Rowsets CachedTime="" DateCreated="2013-07-30T00:13:32" EndDate="2013-07-30T00:13:29" StartDate="2013-07-29T23:13:29" Version="12.2.4 Build(92)">
<Rowset>
<Columns>
<Column Description="Name" MaxRange="1" MinRange="0" Name="Name" SQLDataType="-9" SourceColumn="Name"/>
<Column Description="Value" MaxRange="1" MinRange="0" Name="Value" SQLDataType="-9" SourceColumn="Value"/>
<Column Description="Min" MaxRange="1" MinRange="0" Name="Min" SQLDataType="2" SourceColumn="Min"/>
<Column Description="Max" MaxRange="1" MinRange="0" Name="Max" SQLDataType="2" SourceColumn="Max"/>
<Column Description="ObjectDisplay" MaxRange="1" MinRange="0" Name="ObjectDisplay" SQLDataType="12" SourceColumn="ObjectDisplay"/>
<Column Description="Datatype" MaxRange="1" MinRange="0" Name="Datatype" SQLDataType="-9" SourceColumn="Datatype"/>
</Columns>
<Row>
<Name>Tank</Name>
<Value>T111</Value>
<Min>1</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
<Row>
<Name>Material</Name>
<Value>111-Bulk</Value>
<Min>7</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
<Row>
<Name>Batch</Name>
<Value>1111111</Value>
<Min>7</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
</Rowset>
<Rowset>
<Columns>
<Column Description="Name" MaxRange="1" MinRange="0" Name="Name" SQLDataType="-9" SourceColumn="Name"/>
<Column Description="Value" MaxRange="1" MinRange="0" Name="Value" SQLDataType="-9" SourceColumn="Value"/>
<Column Description="Min" MaxRange="1" MinRange="0" Name="Min" SQLDataType="2" SourceColumn="Min"/>
<Column Description="Max" MaxRange="1" MinRange="0" Name="Max" SQLDataType="2" SourceColumn="Max"/>
<Column Description="ObjectDisplay" MaxRange="1" MinRange="0" Name="ObjectDisplay" SQLDataType="12" SourceColumn="ObjectDisplay"/>
<Column Description="Datatype" MaxRange="1" MinRange="0" Name="Datatype" SQLDataType="-9" SourceColumn="Datatype"/>
</Columns>
<Row>
<Name>Tank</Name>
<Value>T222</Value>
<Min>1</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
<Row>
<Name>Material</Name>
<Value>222-Bulk</Value>
<Min>7</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
<Row>
<Name>Batch</Name>
<Value>2222222</Value>
<Min>7</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
</Rowset>
</Rowsets>
Run Code Online (Sandbox Code Playgroud)
我使用以下XSLT来转换上面提到的XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<!-- <xsl:strip-space elements="*"/>-->
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<Rowset>
<Columns>
<xsl:apply-templates mode="cols" select="Rowset[1]/Row"/>
</Columns>
<xsl:apply-templates select="Rowset"/>
</Rowset>
</xsl:copy>
</xsl:template>
<xsl:template match="Row" mode="cols">
<Column Description="" MaxRange="1" MinRange="0" Name="{Name}" SQLDataType="1" SourceColumn="{Name}"/>
</xsl:template>
<xsl:template match="Rowset">
<Row>
<xsl:apply-templates select="Row/Name"/>
</Row>
</xsl:template>
<xsl:template match="Name">
<xsl:element name="{.}">
<xsl:value-of select="../Value"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
我得到了正确的以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Rowsets CachedTime="" DateCreated="2013-07-30T00:13:32" EndDate="2013-07-30T00:13:29" StartDate="2013-07-29T23:13:29" Version="12.2.4 Build(92)">
<Rowset>
<Columns>
<Column Description="" MaxRange="1" MinRange="0" Name="Tank" SQLDataType="1" SourceColumn="Tank"/>
<Column Description="" MaxRange="1" MinRange="0" Name="Material" SQLDataType="1" SourceColumn="Material"/>
<Column Description="" MaxRange="1" MinRange="0" Name="Batch" SQLDataType="1" SourceColumn="Batch"/>
</Columns>
<Row>
<Tank>T111</Tank>
<Material>111-Bulk</Material>
<Batch>1111111</Batch>
</Row>
<Row>
<Tank>T222</Tank>
<Material>222-Bulk</Material>
<Batch>2222222</Batch>
</Row>
</Rowset>
</Rowsets>
Run Code Online (Sandbox Code Playgroud)
但是现在当我关注XML并运行XSLT时,我给出了下面提到的错误:
XML:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Rowsets CachedTime="" DateCreated="2013-07-30T00:13:32" EndDate="2013-07-30T00:13:29" StartDate="2013-07-29T23:13:29" Version="12.2.4 Build(92)">
<Rowset>
<Columns>
<Column Description="Name" MaxRange="1" MinRange="0" Name="Name" SQLDataType="-9" SourceColumn="Name"/>
<Column Description="Value" MaxRange="1" MinRange="0" Name="Value" SQLDataType="-9" SourceColumn="Value"/>
<Column Description="Min" MaxRange="1" MinRange="0" Name="Min" SQLDataType="2" SourceColumn="Min"/>
<Column Description="Max" MaxRange="1" MinRange="0" Name="Max" SQLDataType="2" SourceColumn="Max"/>
<Column Description="ObjectDisplay" MaxRange="1" MinRange="0" Name="ObjectDisplay" SQLDataType="12" SourceColumn="ObjectDisplay"/>
<Column Description="Datatype" MaxRange="1" MinRange="0" Name="Datatype" SQLDataType="-9" SourceColumn="Datatype"/>
</Columns>
<Row>
<Name>Tank Tag</Name>
<Value>T111</Value>
<Min>1</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
<Row>
<Name>Material</Name>
<Value>111-Bulk</Value>
<Min>7</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
<Row>
<Name>Batch</Name>
<Value>1111111</Value>
<Min>7</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
</Rowset>
<Rowset>
<Columns>
<Column Description="Name" MaxRange="1" MinRange="0" Name="Name" SQLDataType="-9" SourceColumn="Name"/>
<Column Description="Value" MaxRange="1" MinRange="0" Name="Value" SQLDataType="-9" SourceColumn="Value"/>
<Column Description="Min" MaxRange="1" MinRange="0" Name="Min" SQLDataType="2" SourceColumn="Min"/>
<Column Description="Max" MaxRange="1" MinRange="0" Name="Max" SQLDataType="2" SourceColumn="Max"/>
<Column Description="ObjectDisplay" MaxRange="1" MinRange="0" Name="ObjectDisplay" SQLDataType="12" SourceColumn="ObjectDisplay"/>
<Column Description="Datatype" MaxRange="1" MinRange="0" Name="Datatype" SQLDataType="-9" SourceColumn="Datatype"/>
</Columns>
<Row>
<Name>Tank Tag</Name>
<Value>T222</Value>
<Min>1</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
<Row>
<Name>Material</Name>
<Value>222-Bulk</Value>
<Min>7</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
<Row>
<Name>Batch</Name>
<Value>2222222</Value>
<Min>7</Min>
<Max>20</Max>
<ObjectDisplay>Enabled</ObjectDisplay>
<Datatype>String</Datatype>
</Row>
</Rowset>
</Rowsets>
Run Code Online (Sandbox Code Playgroud)
错误:
[ERROR] [XSLSingleTableTransformation]XSLTransform error: java.lang.RuntimeException: An attribute whose value must be a QName had the value 'Tank Tag'
Run Code Online (Sandbox Code Playgroud)
如何删除此错误?
如果此错误是由于tank和tag之间的空间造成的,那么1)我可以获得带有空格的XML标记名称吗?2)如果没有,我怎么能删除那个空格而不是" - "
你只需要改变这个:
<xsl:template match="Name">
<xsl:element name="{.}">
Run Code Online (Sandbox Code Playgroud)
进入这个:
<xsl:template match="Name">
<xsl:element name="{translate(., ' ' , '_')}">
Run Code Online (Sandbox Code Playgroud)
这会将名称中的空格转换为下划线.请注意,对于可用作元素名称的内容还有其他限制,因此这可能不是它的结尾.
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |