我有这个:
<Item name="Alpha">
<Field name="CreationDateTime">2012-04-26</Field>
<Field name="Material" readOnly="X"> Congress </Field>
</Item>
<Item name="Beta">
<Field name="CreationDateTime">2012-05-26</Field>
<Field name="Material" readOnly="X"> Democracy </Field>
</Item>
.
.
.
and so on...
我希望以这种格式进行转换:
<Item name="Alpha">
<CreationDateTime >2012-04-26</CreationDateTime>
<Material readOnly="X"> Congress </Material>
</Item>
<Item name="Beta">
<CreationDateTime >2012-05-26</CreationDateTime>
<Material readOnly="X"> Democracy </Material>
</Item>
.
.
.
and so on...
我需要在客户端(即在javascript和jQuery中)执行此操作。我可以使用jQuery插件(例如谷歌的AJAXSLT)。问题是 - 我以前从未完成过XSLT(也是使用javascript!),并且不知道如何去做。
答案 0 :(得分:1)
问题是 - 我之前从未完成过XSLT(也是使用javascript!),并且不知道如何去做。
XSLT是一种将XML文档转换为其他文档(主要是XML,但也包括HTML,纯文本等)文档的语言。你需要的是一个可以工作的输入XML,一个应该在输入上应用以获得输出的转换,以及一个XSLT处理器来实现它。
XSLT处理器可以是一个工具,一个库,一些框架或操作系统提供的功能,或者在这种情况下(使用JavaScript)浏览器。
您已经拥有XML输入,因此您需要处理器和转换。遗憾的是,处理器特定于浏览器(例如,对于Mozilla为XSLTProcessor,对于IE为ActiveX等),您需要编写代码来测试您正在使用的特定浏览器(如可以看到{{3 }})。
幸运的是,您不必这样做,因为您提到的Google AJAXSLT等javascript库会隐藏下面的详细信息并公开可以跨浏览器使用的统一API。所以现在你只需编写一个XSL文件来进行转换。
根据您的样本,如果输入为:
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<Item name="Alpha">
<Field name="CreationDateTime">2012-04-26</Field>
<Field name="Material" readOnly="X">Congress</Field>
</Item>
<Item name="Beta">
<Field name="CreationDateTime">2012-05-26</Field>
<Field name="Material" readOnly="X">Democracy</Field>
</Item>
</Items>
使用像这样的XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<Items>
<xsl:apply-templates />
</Items>
</xsl:template>
<xsl:template match="Item">
<Item>
<xsl:attribute name="name">
<xsl:value-of select="@name" />
</xsl:attribute>
<xsl:apply-templates />
</Item>
</xsl:template>
<xsl:template match="Field">
<xsl:variable name="fieldName" select="@name" />
<xsl:element name="{$fieldName}">
<xsl:if test="@readOnly">
<xsl:copy-of select="@readOnly" />
</xsl:if>
<xsl:value-of select="." />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
你明白了:
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<Item name="Alpha">
<CreationDateTime>2012-04-26</CreationDateTime>
<Material readOnly="X">Congress</Material>
</Item>
<Item name="Beta">
<CreationDateTime>2012-05-26</CreationDateTime>
<Material readOnly="X">Democracy</Material>
</Item>
</Items>
希望这可以帮助您更快地在javascript中执行XSLT。
最后,请确保您专注于XSLT 1.0,因为浏览器尚不支持2.0。