【发布时间】:2010-12-02 13:30:25
【问题描述】:
我必须将我的 xml 输出转换为 html。我正在关注link text 的教程,我的代码在一行中输出 xml 标记,没有任何带有文本值的格式。我希望输出为 HTML 无序列表,遵循 xml 文件输出中父子级的层次结构。
这是页面输出:
message msg 1message msg 1-1message msg 1-2message msg 1-2-1message msg 1-2-2message
msg 1-2-2-1message msg 1-2-2-1-1message msg 1-2-2-1-2
&这里是页面来源:
<html:ul xmlns:html="http://www.w3.org/1999/xhtml"><html:li>message msg 1</html:li>
<html:ul><html:li>message msg 1-1</html:li><html:li>message msg 1-2</html:li><html:ul>
<html:li>message msg 1-2-1</html:li><html:li>message msg 1-2-2</html:li><html:ul>
<html:li>message msg 1-2-2-1</html:li><html:ul><html:li>message msg 1-2-2-1-1</html:li>
<html:li>message msg 1-2-2-1-2</html:li></html:ul></html:ul></html:ul></html:ul></html:ul>
这是我的代码
php file:
<?php
# LOAD XML FILE
$XML = new DOMDocument();
$XML->load('messages.xml');
# START XSLT
$xslt = new XSLTProcessor();
$XSL = new DOMDocument();
$XSL->load('msg.xsl');
$xslt->importStylesheet( $XSL );
print $xslt->transformToXML( $XML );
?>
msg.xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml">
<xsl:output omit-xml-declaration="yes" />
<xsl:template match="messages">
<html:ul>
<xsl:apply-templates select="message" />
</html:ul>
</xsl:template>
<xsl:template match="message[message]">
<html:li>message <xsl:value-of select="@msg_id" /></html:li>
<html:ul>
<xsl:apply-templates select="message" />
</html:ul>
</xsl:template>
<xsl:template match="message">
<html:li>message <xsl:value-of select="@msg_id" /></html:li>
<xsl:apply-templates select="message" />
</xsl:template>
</xsl:stylesheet>
messages.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="msg.xsl"?><messages>
<message msg_id="1" emp_msg="msg 1" parent_msg_id="" parent_msg="" depth="0">
<message msg_id="2" emp_msg="msg 1-1" parent_msg_id="1" parent_msg="msg 1" depth="1"/>
<message msg_id="3" emp_msg="msg 1-2" parent_msg_id="1" parent_msg="msg 1" depth="1">
<message msg_id="4" emp_msg="msg 1-2-1" parent_msg_id="3" parent_msg="msg 1-2" depth="2"/>
<message msg_id="5" emp_msg="msg 1-2-2" parent_msg_id="3" parent_msg="msg 1-2" depth="2">
<message msg_id="6" emp_msg="msg 1-2-2-1" parent_msg_id="5" parent_msg="msg 1-2-2" depth="3">
<message msg_id="7" emp_msg="msg 1-2-2-1-1" parent_msg_id="6" parent_msg="msg 1-2-2-1" depth="4"/>
<message msg_id="8" emp_msg="msg 1-2-2-1-2" parent_msg_id="6" parent_msg="msg 1-2-2-1" depth="4"/>
</message>
</message>
</message>
</message>
</messages>
【问题讨论】:
-
XML 文件是否因为剪切和粘贴错误而无效,还是您要转换的内容? - 最后一行“”应该是“”
-
您的输出是什么样的,您希望它是什么样的?
-
@Chris Bentley,这只是剪切和粘贴错误。我修复了错误,这是由于使用“loadXML”而不是“load”来加载 xml 文档。虽然它没有显示结果,只是输出标签。我更新了我的问题。
-
这不是我在这里得到的输出。你看网页源码了吗?
-
@Ignacio Vazquez-Abrams,它显示所有带有数字的 xml 标签。数字可能作为它的一部分从 xml 输出中获得。我将输出添加到 OP。实际上,我希望在 xml 文件输出中按照父子的层次结构将输出作为 HTML 无序列表。 & 它应该包含“msg_id”和“emp_msg”的值。