我有一个类似于:
的XML输入<data>
<document docid="docfilename" />
<record>ABC</record>
<info>Testing</info>
<case docid="casefilename">
<details>
Some random information
</details>
<author>Creator</author>
</case>
<page docid="pageurl">M Page</page>
</data>
问题是,我想将这个XML转换为在浏览器中打开的完全相同的XML,人们可以查看转换的XML,只需用docidname / casefilename / pageurl的超链接替换docid属性值取决于链接。
例如
<data>
<document docid="<a href="docfilename.html">docfilename</a>" />
<record>ABC</record>
<info>Testing</info>
<case docid="<a href="casefilename.html">casefilename</a>">
<details>
Some random information
</details>
<author>Creator</author>
</case>
<page docid="<a href="http://www.example.com">pageurl</a>">M Page</page>
</data>
在上面的输出中,您可以在docid中查看标记,但是用户只会在docid中看到链接,无论在哪里找到该链接,都会在浏览器中显示该文件的链接。
任何以给定格式转换此xml的帮助都将受到高度赞赏。
答案 0 :(得分:1)
那么您基本上要问的是如何创建在浏览器中打开XML文档时显示的超链接?
没有办法直接这样做。浏览器应该只显示文档中的数据,它不会创建类似的超链接。
您唯一可行的解决方案是将其转换为实际的HTML文档,将每个元素/属性转换为文本,并覆盖您想要超链接的属性。这是一个简单的表格:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>XML source</title>
</head>
<body>
<pre><xsl:apply-templates /></pre>
</body>
</html>
</xsl:template>
<xsl:template match="node()">
<xsl:value-of select="concat('<',name())" />
<xsl:apply-templates select="@*" />
<xsl:text>></xsl:text>
<xsl:apply-templates select="node()" />
<xsl:value-of select="concat('</',name(),'>')" />
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="@*">
<xsl:value-of select="concat(' ',name(),'="',.,'"')" />
</xsl:template>
<xsl:template match="@docid">
<xsl:variable name="url" select="concat(.,'.html')" />
<xsl:value-of select="concat(' ',name(),'="')" />
<a href='{$url}'><xsl:value-of select="." /></a>
<xsl:text>"</xsl:text>
</xsl:template>
</xsl:stylesheet>
没有任何漂亮的XML格式化或折叠/扩展节点这样做,但您至少可以根据需要显示带有超链接的XML。正如@lwburk所说,你还没有真正指出这些链接应该来自哪里;你应该能够根据自己的需要调整它。