我是编码新手,需要帮助解决使用XSLT的XML文件并以HTML格式提供输出。 我有下面的代码。 我需要脚本名称和类型,其中包含result =“INFORMATION”
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="class.xsl"?>
<TestLog>
<Event dpIter="0">
<Event Timestamp="27-Dec-2012 04:16:26.830 PM" Type="Script Start" Headline="Script start [DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003]" Result="INFORMATION">
<Property line_number="1"/>
<Property script_iter_count="0"/>
<Property script_name="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003"/>
<Property script_id="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003.java"/>
</Event>
<Event Timestamp="27-Dec-2012 04:16:26.830 PM" Type="General" Headline="D:\TestAutomation\LogLevels.txt (The system cannot find the file specified.)" Result="INFORMATION">
<Property script_name="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003"/>
<Property line_number="35"/>
<Property script_id="DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003.java"/>
</Event>
</Event>
</TestLog>
XSLT代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform">;
<xsl:template match="/">
<html>
<body>
<h2></h2>
<table border="1">
<tr>
<th>Type</th>
<th>Result</th>
</tr>
<xsl:for-each select="TestLog/Event">
<tr>
<td><xsl:value-of select="Type"/></td>
<td><xsl:value-of select="Result"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
据我了解,如果Event
属性等于“INFORMATION”,您希望访问Result
个节点。
注意:这会告诉您有关XSLT的一般原则,因为您的问题广泛且不具体。只有在问题更精确的情况下,才能给出更准确的答案。
在XSLT中,您可以在方括号中指定此类限制:
<xsl:template match="Event[parent::Event and @Result='INFORMATION']">
上面的代码行匹配Event
元素,如果它们是高级Event
元素的子元素,并且它们的@Result是正确的。
这是一个完整的样式表,作为查找特定节点的示例:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="TestLog|Event[parent::Testlog]">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Event[parent::Event and @Result='INFORMATION']">
<xsl:text>Type: </xsl:text>
<xsl:value-of select="@Type"/>
<xsl:text> </xsl:text>
<xsl:text>Script name: </xsl:text>
<xsl:value-of select="Property/@script_name"/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="Property"/>
</xsl:stylesheet>
如果应用于您的输入XML,结果就是:
Type: Script Start
Script name: DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003
Type: General
Script name: DSE.DSEBalanceInquiry_FC.DseBalanceInquiry_FC_Test_003
找到所需的Event
个节点并输出其Type
属性,以及其子元素之一的script_name
属性。
编辑(回复您的评论):
以下样式表可以满足您的需求,我修改了几项内容:
for-each
的节点,如下所示:TestLog/Event/Event
所有这些让我相信你从来没有尝试过这样做。
完整样式表:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2></h2>
<table border="1">
<tr>
<th>Type</th>
<th>Result</th>
</tr>
<xsl:for-each select="TestLog/Event/Event[@Result='INFORMATION']">
<tr>
<td>
<xsl:value-of select="@Type"/>
</td>
<td>
<xsl:value-of select="@Result"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>