这是我的XML文件,如果我运行XSLt文件,我会在Eclipse XSL转换中以相同的顺序得到相同的输出。 即使向我的xml文件添加新记录并运行XSL文件,<xsl:value-of select="generate-id(.)"/>
也会为新记录创建唯一标识。为同一个XSL文件生成两个不同的输出?
<?xml version="1.0" encoding="UTF-8"?>
<CONTACTS>
<CONTACT>
<Customer-ID>N65539</Customer-ID>
<FirstName>Ben</FirstName>
<LastName>Foden</LastName>
<email></email>
<address></address>
<state>AZ</state>
<country>US</country>
</CONTACT>
<CONTACT>
<Customer-ID>N65539</Customer-ID>
<FirstName>Nimal</FirstName>
<LastName>Anup</LastName>
<email>[email protected]</email>
<address></address>
<state>TN</state>
<country>IN</country>
</CONTACT>
<CONTACTS>
这是我更新的XSLT文件:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<!--Identity template to copy content forward-->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="CONTACT">
<xsl:copy>
<Customer-ID>
<xsl:apply-templates select="node()" mode="generate-id"/>
</Customer-ID>
<FirstName>
<xsl:value-of select="FirstName"/>
</FirstName>
<LastName>
<xsl:value-of select="LastName"/>
</LastName>
<email>
<xsl:value-of select="email"/>
</email>
<address>
<xsl:value-of select="address"/>
</address>
<state>
<xsl:value-of select="state"/>
</state>
<country>
<xsl:value-of select="country"/>
</country>
</xsl:copy>
</xsl:template>
<xsl:template match="node()" mode="generate-id">
<xsl:text>N</xsl:text>
<xsl:number level="single" count="node()" format="100"/>
</xsl:template>
</xsl:stylesheet>
然后我用于XUL XSLT处理器功能,我发现了一种不同类型的ID和相同的输出的XSLT文件。 它不断为旧记录和新记录生成一个新ID如果我在XML文件中添加一条新记录。
如何为新记录生成新的ID?以及如何将我的输入文件的相同XML模板添加到我的XML输出文件中。
这是输出我越来越:
<?xml version="1.0" encoding="UTF-8"?>
<CONTACTS>
<CONTACT><Customer-ID>id0x03e4a620</Customer-ID><FirstName>Ben</FirstName><LastName>Foden</LastName><email></email><address></address><state>AZ</state><country>US</country></CONTACT>
<CONTACT><Customer-ID>id0x03e4ad80</Customer-ID><FirstName>Nimal</FirstName><LastName>Anup</LastName><email>[email protected]</email><address></address><state>TN</state><country>IN</country></CONTACT>
<CONTACTS>
这是我的javascript调用XSLT文件:脚本调用这个函数保存XML文件后。新记录的更新与输入xml文件中提到的相同。
function process()
{
var src = readFile("c:\\idgenerator.xsl");
var parsed = (new DOMParser()).parseFromString(src, "text/xml");
var stylesheet = parsed.documentElement;
var processor = new XSLTProcessor();
processor.importStylesheet(stylesheet);
objXMLDoc = processor.transformToDocument(objXMLDoc);
var serializer = new XMLSerializer();
var prettyString = serializer.serializeToString(objXMLDoc);
saveFile(prettyString, "C:\\mercredi.xml");
}
非常感谢。
我仍在努力了解您要求的内容。您已经显示了实际的输出(来自XUL下的XSLT处理器);你想要的输出是什么?是否希望XUL下的XSLT处理器输出与Eclipse下的XSLT相同的生成ID? – LarsH
第一个XML文件是Eclipse中XSLT文件的实际输出,这是我所需的输出。第二个XML文件是XUL下的XSLT处理器的输出。我的问题是为什么它会生成两种不同类型的输出?来自同一个XSLT文件。 – linguini
@LarsH:可能是Eclipse使用xsl.jaxp,而XUL使用XSLT处理器。有什么区别吗? – linguini