我一直在寻找为多个XML创建一个XSL .Below是示例XML,它是众多XML之一。区别在于<ItemRequest>
代替<m.Currency>
还有其他元素。我只需要显示ItemRequest
,它应该与所有XML兼容。
<?xml version="1.0" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl" ?>
<ServiceRequest xmlns:m="urn:messages.service.com"
xmlns="urn:control.services.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RequestHeader>
<Service>Blah</Service>
<Operation>Blah1</Operation>
</RequestHeader>
<m:ItemRequest>
<ServiceRequest xmlns="urn:control.com" xmlns:m="urn:messages.service.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RequestHeader>
<Service>Blah</Service>
<Operation>Blah2</Operation>
</RequestHeader>
<m:Currency>
<m:MaintType>a</m:MaintType>
<m:BackOffice>b</m:BackOffice>
<m:Code>c</m:Code>
<m:Number>%00</m:Number>
<m:EditCode>1</m:EditCode>
</m:Currency>
</ServiceRequest>
</m:ItemRequest>
</ServiceRequest>
输出:与
类似的东西<h1>Operation: Currency</h1>
<table>
<tr>
<td>MainType</td>
<td>BackOffice</td>
<td>Code</td>
<td>Number</td>
<td>EditCode</td>
</tr>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>%00</td>
<td>1</td>
</tr>
</table>
答案 0 :(得分:0)
由于XML源的不同部分有两个默认命名空间,因此我将每个命名空间映射到不同的前缀:外部命名空间为ns1
,内部命名空间为ns2
。我使用了忽略部分节点层次结构的XPath表达式。这适用于您发布的输入XML(从m:Currency
提取数据):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:ns1="urn:control.services.com"
xmlns:ns2="urn:control.com"
xmlns:m="urn:messages.service.com"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" method="html"/>
<xsl:template match="/">
<html>
<body>
<h1><xsl:value-of select="ns1:ServiceRequest/m:ItemRequest//ns2:Operation"/></h1>
<xsl:apply-templates select="ns1:ServiceRequest/m:ItemRequest//m:Currency"/>
</body>
</html>
</xsl:template>
<xsl:template match="m:Currency">
<table>
<tr><xsl:apply-templates select="*" mode="headers"/></tr>
<tr><xsl:apply-templates select="*" mode="data"/></tr>
</table>
</xsl:template>
<xsl:template match="m:Currency/*" mode="headers">
<td><xsl:value-of select="substring-after(name(.), ':')"/></td>
</xsl:template>
<xsl:template match="m:Currency/*" mode="data">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>
你说m:Currency
只是一个例子,你还有其他元素。此XSL仅适用于该示例。如果您在问题中添加一个描述您接受的其他输入的XML Schema,则可以为其他方案编写样式表。