首页 > 解决方案 > 在 1 个 XSLT 文件中使用 if 语句来转换 2 种不同类型的 XML 文件

问题描述

我正在尝试使用单个 XSLT 文件来转换 2(或更多)不同类型的 XML 文件。

我希望有某种方法可以通过检查 XML 文件的“id”值来检查 XML 文件的类型,然后运行相应的转换。

例如,

XML 文件 1:

<?xml version='1.0' ?>
<file1 id="123">
	<key>
            <uuid>123456</uuid>
	</key>
</file1>

XML 文件 2:

<?xml version='1.0' ?>
<file2 id="456">
    <house>
        <doors>1</doors>
        <windows>4</windows>
    </house>
</file2>

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> 
<body> 
    <xsl:choose>

        <xsl:when test="@id = 123">
        // do something
        </xsl:when>
    
        <xsl:when test="@id = 456">
        // do something else
        </xsl:when>
    
        <xsl:otherwise>
        // exception message
        </xsl:otherwise>
    
    </xsl:choose>
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet>   

XML 文件在其根目录中都将具有相同的“id”,但我不知道如何在根目录中查询“id”值?

标签: xmlxslt

解决方案


要获取根元素的属性(不管根元素什么),请使用/*/@id.

<xsl:choose>

    <xsl:when test="/*/@id = 123">
        // do something
    </xsl:when>

    <xsl:when test="/*/@id = 456">
        // do something else
    </xsl:when>

    <xsl:otherwise>
        // exception message
    </xsl:otherwise>

</xsl:choose>

推荐阅读