我正在尝试将xml转换为xslt表:
这是我的xml:
.......
?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="VHSXSLT500.xsl"?>
<test>
<VHSResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://SOMEURL.com/ABC">
<BaseResponse>
<VIN>123456789</VIN>
<VehicleDamageabilityIndicator>AB</VehicleDamageabilityIndicator>
<NumberOfTitlingTransactionsIndicator>AB</NumberOfTitlingTransactionsIndicator>
<LastOwnerAcquisitionDate />
<OrderDate>2020-08-12T10:54:00.579696-04:00</OrderDate>
<ErrorReason>abc</ErrorReason>
</BaseResponse>
</VHSResponse>
Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>Object reference not set to an instance of an object.</ExceptionMessage>
<ExceptionType>System.NullReferenceException</ExceptionType>
</Error>
</test>
*这是xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<style>
h2 {text-align: center;}
</style>
<body>
<h2>VHS TEST RESULTS</h2>
<table border="1">
<tr>
<th>SrNo</th>
<th>VIN</th>
<th>VehicleDamageability Indicator</th>
<th>Number Of Titling Transactions Indicator</th>
<th>Last Owner Acquisition Date</th>
<th>Order Date</th>
<th>Error Reason</th>
<th>500 Error Message</th>
</tr>
<xsl:for-each select=".//VHSResponse">
<tr>
<td style="text-align:center"><xsl:number value="position()" format="1" /></td>
<td style="text-align:center"><xsl:value-of select=".//VIN"/></td>
<td style="text-align:center"><xsl:value-of select=".//VehicleDamageabilityIndicator"/></td>
<td style="text-align:center"><xsl:value-of select=".//NumberOfTitlingTransactionsIndicator"/></td>
<td style="text-align:center"><xsl:value-of select=".//LastOwnerAcquisitionDate"/></td>
<td style="text-align:center"><xsl:value-of select=".//OrderDate"/></td>
<td style="text-align:center"><xsl:value-of select=".//ErrorReason"/></td>
<td style="text-align:center"><xsl:value-of select=".//Message"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select=".//Error">
<tr>
<td style="text-align:center"><xsl:value-of select=".//Message"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我得到了结果,但不是我想要的:
在此处输入图像描述
这就是我想要的结果。。基本上是作为我的xml的的表中的条目
在此处输入图像描述
我知道它需要一些多循环逻辑,但不知道如何做到这一点。。我是xslt 的初学者
此外,当我将xlmns保存在xml中时,它不会填充结果,只有当我从xml中删除xmlns时,我才能看到表。。不确定啊,请帮忙。
如果您想要每条记录一行,那么-
- 如果只有一个<错误>根据记录,您可以执行以下操作:
<xsl:for-each select="test">
<tr>
<td style="text-align:center"><xsl:number value="position()" format="1" /></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/VIN"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/VehicleDamageabilityIndicator"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/NumberOfTitlingTransactionsIndicator"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/LastOwnerAcquisitionDate"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/OrderDate"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/ErrorReason"/></td>
<td style="text-align:center"><xsl:value-of select="Error/Message"/></td>
</tr>
- 如果每条消息有多个错误(似乎是这样(,您可以执行以下操作:
<xsl:for-each select="test">
<tr>
<td style="text-align:center"><xsl:number value="position()" format="1" /></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/VIN"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/VehicleDamageabilityIndicator"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/NumberOfTitlingTransactionsIndicator"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/LastOwnerAcquisitionDate"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/OrderDate"/></td>
<td style="text-align:center"><xsl:value-of select="VHSResponse/BaseResponse/ErrorReason"/></td>
<td style="text-align:center">
<xsl:for-each select="Error">
<xsl:value-of select="Message"/>
</xsl:for-each>
</td>
</tr>
这将导致所有错误消息都在一个表单元格中——如果您希望每行有一条记录,这就是您想要的。