Как сгенерировать / записать идентификатор (буквенно-цифровой) при добавлении нового контакта в XML-файл - PullRequest
1 голос
/ 15 июля 2011

Можно ли сгенерировать буквенно-цифровой идентификатор при создании нового контакта в файле XML. Я использовал функцию XSLT <xsl:value-of select="generate-id(.)"/> для генерации уникального идентификатора в моем xml-файле в начале для сериализации, поэтому я использовал приведенное выше для генерации идентификатора.

Я могу добавить новую запись в XML-файл, используя JavaScript DOM в XUL.

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-файле? вместо того, чтобы вводить идентификатор вручную в текстовое поле?

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>nimal.anup@gmail.com</email>
<address></address>
<state>TN</state>
<country>IN</country>
</CONTACT>


<CONTACTS>

1 Ответ

0 голосов
/ 16 июля 2011

Этот XSLT копирует входной XML как есть и заполняет все элементы Customer-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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...