Javascript XML到HTML的转换:最佳实践?
我有这样的XML:Javascript XML到HTML的转换:最佳实践?,javascript,xml,xslt,Javascript,Xml,Xslt,我有这样的XML: <Artist name="Syd Mead" id="3412" ntrack="28" pop="8"/> 对于最广泛的浏览器,“正确”的方法是什么?通过XSLT转换可以可靠地实现这一点吗?使用正则表达式(不太可能)更好,还是必须解析xml,并为每个标记读取每个属性并手动执行document.createElement和setAttribute 标记位于父节点中,其中有很多。这方面有最佳实践吗?这似乎是XSLT的完美候选—XML是干净且格式良好的。如果
<Artist name="Syd Mead" id="3412" ntrack="28" pop="8"/>
对于最广泛的浏览器,“正确”的方法是什么?通过XSLT转换可以可靠地实现这一点吗?使用正则表达式(不太可能)更好,还是必须解析xml,并为每个
标记读取每个属性并手动执行document.createElement和setAttribute
标记位于父节点中,其中有很多。这方面有最佳实践吗?这似乎是XSLT的完美候选—XML是干净且格式良好的。如果您关心浏览器兼容性,为什么不在服务器端进行转换
此XSLT将转换您的数据-您可以测试它:
来源数据:
<Artists>
<Artist name="Syd Mead" id="3412" ntrack="28" pop="8"/>
</Artists>
我还没有在客户端完成这项工作,因此很遗憾,我不能谈论浏览器兼容性。我认为另一个XSLT样式表选项更简单:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/*/Artist">
<a href="#" class="pop-{@pop}">
<xsl:apply-templates select="@*"/>
<span><xsl:value-of select="@name"/></span>
</a>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="data-{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
XML输入
<Artists>
<Artist name="Syd Mead" id="3412" ntrack="28" pop="8"/>
</Artists>
<a class="pop-8" href="#" data-name="Syd Mead" data-id="3412" data-ntrack="28" data-pop="8">
<span>Syd Mead</span>
</a>
这里有一个简单的转换(没有条件,没有额外的模板,没有xsl:attribute
,没有xsl:for each
),简短而完整的转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="no"/>
<xsl:template match="Artist">
<a href="#" data-name="{@name}"
data-id="{@id}"
data-ntrack="{@ntrack}"
data-pop="{@pop}"
class="pop-{@pop}">
<span><xsl:value-of select="@name"/></span>
</a>
</xsl:template>
</xsl:stylesheet>
<a href="#" data-name="Syd Mead" data-id="3412" data-ntrack="28" data-pop="8" class="pop-8"><span>Syd Mead</span></a>
在提供的XML文档上应用此转换时:
<Artist name="Syd Mead" id="3412" ntrack="28" pop="8"/>
说明:正确使用(属性值模板)服务器端不是选项。那么XSLT转换起来会是什么样子呢?XSLT语法是否能使相同的代码适用于顶级浏览器(IE7+、Chrome、Firefox、Safari)。@SimonMcKenzie-别忘了类
属性。@DevNull-我花了一段时间才明白你的意思-我没有注意到!感谢您的帮助。对于将来希望在客户端上实现这一点的任何人来说,这似乎都是适用的:是的,这可以通过使用XSLT以非常紧凑和优雅的方式完成。在我看来,这是一个在这种情况下更可行的解决方案,特别是因为它的简洁语法非常类似于现代web框架中的模板。@layze,是的,我完全同意:)。不客气。
<Artist name="Syd Mead" id="3412" ntrack="28" pop="8"/>
<a href="#" data-name="Syd Mead" data-id="3412" data-ntrack="28" data-pop="8" class="pop-8"><span>Syd Mead</span></a>