Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XML到HTML的转换:最佳实践?_Javascript_Xml_Xslt - Fatal编程技术网

Javascript XML到HTML的转换:最佳实践?

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是干净且格式良好的。如果

我有这样的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>