我有以下XML:
<?xml version="1.0" encoding="utf-8"?>
<Rowsets>
<Rowset>
<Columns>
<Column Description="DrilldownDepth" MaxRange="1" MinRange="0" Name="DrilldownDepth" SQLDataType="4" SourceColumn="DrilldownDepth"/>
<Column Description="ABC" MaxRange="1" MinRange="0" Name="ABC" SQLDataType="4" SourceColumn="ABC"/>
<Column Description="DEF" MaxRange="1" MinRange="0" Name="DEF" SQLDataType="-1" SourceColumn="DEF"/>
<Column Description="PQR" MaxRange="1" MinRange="0" Name="PQR" SQLDataType="-1" SourceColumn="PQR"/>
</Columns>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>25</ABC>
<DEF>DDD</DEF>
<PQR>PPP</PQR>
</Row>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>16</ABC>
<DEF>AAA</DEF>
<PQR>BBB</PQR>
</Row>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>19</ABC>
<DEF>SEE</DEF>
<PQR>HELP</PQR>
</Row>
</Rowset>
</Rowsets>
现在我需要添加每一行。因此我的XML将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Rowsets>
<Rowset>
<Columns>
<Column Description="DrilldownDepth" MaxRange="1" MinRange="0" Name="DrilldownDepth" SQLDataType="4" SourceColumn="DrilldownDepth"/>
<Column Description="ABC" MaxRange="1" MinRange="0" Name="ABC" SQLDataType="4" SourceColumn="ABC"/>
<Column Description="DEF" MaxRange="1" MinRange="0" Name="DEF" SQLDataType="-1" SourceColumn="DEF"/>
<Column Description="PQR" MaxRange="1" MinRange="0" Name="PQR" SQLDataType="-1" SourceColumn="PQR"/>
</Columns>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>25</ABC>
<DEF>DDD</DEF>
<PQR>PPP</PQR>
<XYZ></XYZ>
</Row>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>16</ABC>
<DEF>AAA</DEF>
<PQR>BBB</PQR>
<XYZ></XYZ>
</Row>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>19</ABC>
<DEF>SEE</DEF>
<PQR>HELP</PQR>
<XYZ></XYZ>
</Row>
</Rowset>
</Rowsets>
我如何使用transform / XSLT实现此目的?
我尝试了各种XSLT,但不知怎的,我无法实现它。
Soham
答案 0 :(得分:1)
这个简单的XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Template #1 -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Template #2 -->
<xsl:template match="Row">
<xsl:copy>
<xsl:apply-templates />
<XYZ></XYZ>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
...应用于原始XML时:
<?xml version="1.0" encoding="UTF-8"?>
<Rowsets>
<Rowset>
<Columns>
<Column Description="DrilldownDepth" MaxRange="1" MinRange="0" Name="DrilldownDepth" SQLDataType="4" SourceColumn="DrilldownDepth"/>
<Column Description="ABC" MaxRange="1" MinRange="0" Name="ABC" SQLDataType="4" SourceColumn="ABC"/>
<Column Description="DEF" MaxRange="1" MinRange="0" Name="DEF" SQLDataType="-1" SourceColumn="DEF"/>
<Column Description="PQR" MaxRange="1" MinRange="0" Name="PQR" SQLDataType="-1" SourceColumn="PQR"/>
</Columns>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>25</ABC>
<DEF>DDD</DEF>
<PQR>PPP</PQR>
</Row>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>16</ABC>
<DEF>AAA</DEF>
<PQR>BBB</PQR>
</Row>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>19</ABC>
<DEF>SEE</DEF>
<PQR>HELP</PQR>
</Row>
</Rowset>
</Rowsets>
...产生了预期的结果:
<?xml version="1.0" encoding="UTF-8"?><Rowsets>
<Rowset>
<Columns>
<Column Description="DrilldownDepth" MaxRange="1" MinRange="0" Name="DrilldownDepth" SQLDataType="4" SourceColumn="DrilldownDepth"/>
<Column Description="ABC" MaxRange="1" MinRange="0" Name="ABC" SQLDataType="4" SourceColumn="ABC"/>
<Column Description="DEF" MaxRange="1" MinRange="0" Name="DEF" SQLDataType="-1" SourceColumn="DEF"/>
<Column Description="PQR" MaxRange="1" MinRange="0" Name="PQR" SQLDataType="-1" SourceColumn="PQR"/>
</Columns>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>25</ABC>
<DEF>DDD</DEF>
<PQR>PPP</PQR>
<XYZ/>
</Row>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>16</ABC>
<DEF>AAA</DEF>
<PQR>BBB</PQR>
<XYZ/>
</Row>
<Row>
<DrilldownDepth>1</DrilldownDepth>
<ABC>19</ABC>
<DEF>SEE</DEF>
<PQR>HELP</PQR>
<XYZ/>
</Row>
</Rowset>
</Rowsets>
<强>解释强>
<row>
元素,处理其子元素(通过标识模板),并添加所需的<XYZ>
节点。