在XML文件中添加新联系人时如何生成/写入ID(字母数字)

问题描述:

是否可以在xml文件中创建新联系人时生成字母数字ID。 我使用XSLT函数<xsl:value-of select="generate-id(.)"/>在我的xml文件中生成一个唯一的ID,以便序列化,所以我使用上面的方法生成ID。在XML文件中添加新联系人时如何生成/写入ID(字母数字)

我可以在XUL中使用JavaScript DOM在xml文件中添加新记录。

function create() 
{ 

var src = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\ 
<CONTACT>\ 
    <Customer-ID>"+document.getElementById("Customer-ID").value+"</Customer-ID>\ 
    <FirstName>"+document.getElementById("FirstName").value+"</FirstName>\ 
    <LastName>"+document.getElementById("LastName").value+"</LastName>\ 
    <email>"+document.getElementById("email").value+"</email>\ 
    <address>"+document.getElementById("address").value+"</address>\ 
    <state>"+document.getElementById("state").value+"</state>\ 
    <country>"+document.getElementById("country").value+"</country>\ 
</CONTACT>"; 

print(src); 

var node = srcToNode(src); 

    if (objXMLDoc.childNodes && objXMLDoc.childNodes.length) { 

     for (var i = 0; i < objXMLDoc.childNodes.length; ++i) { 
    if (objXMLDoc.childNodes.item(i).childNodes && objXMLDoc.childNodes.item(i).childNodes.length) { 
     var x = objXMLDoc.childNodes.item(i).childNodes.length; 
     var lastNode = objXMLDoc.childNodes.item(i).childNodes.item(x-2); 

     } 

     } 

objXMLDoc.getElementsByTagName("CONTACT");//objXMLDoc.childNodes.item(0).lastChild; 

objXMLDoc.appendChild(node); 
var serializer = new XMLSerializer(); 
var prettyString = serializer.serializeToString(objXMLDoc); 
saveFile(prettyString, "C:\\contact.xml"); 
} 
} 

上面的代码完全可以在我的xml文件中创建一条新记录。 如何在我的XML文件中创建新联系人时生成唯一ID?而不是在文本框中手动输入ID?

XML文件:

<?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> 
+0

你没有表现出XSLT。 'generate-id()'失败了?问题是什么? –

+0

在我的情况下,当我通过XUL向我的XML文件添加一个新的联系人时,我想为我的XML文件中的Customer-ID字段的新联系人生成一个唯一的ID。我不想获得我的文本框值手动执行ID。我如何使用XSLT生成唯一的ID?仅用于客户ID。是否有可能使用XML加载XSLT文件,或者使用其他方式来生成唯一的ID?谢谢。 – linguini

+0

你不是已经使用'generate-id(。)'吗?这就是XSLT的方式。 –

这XSLT拷贝输入XML作为是和填充所有Customer-ID元素具有唯一ID:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Customer-ID"> 
    <xsl:copy> 
    <xsl.value-of select="generate-id()"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+0

谢谢。我正在使用以下函数//创建一个XSLT处理器实例 var processor = new XSLTProcessor(); //为XSLT转换创建一个空的XML文档 var transform = document.implementation.createDocument(“”,“”,null); //载入XSLT transform.onload = loadTransform; transform.load(“file:// C:/ idgenerator。xslt“);我无法加载文件的地方任何想法.. – linguini

+0

为什么你正在创建一个空文档?你不想将转换应用到保存的文档吗? –

+0

我正在关注此链接使用Firefox/XUL中的XSLT处理器处理我的XML文件。 – linguini