XSLT Eğer web sayfasında görüntülemek istediğiniz biçime XML veritabanı dosya dönüştürme için arkadaşım. Her kayıt için istediğiniz tüm HTML içeren bir XSL şablonu oluşturmak ve sonra için-her deyimi ile XML dosyası boyunca yineleme. Ben kaba bir bakış vereceğiz ve gerekirse daha fazla bilgi yardımcı olabilir.
İşte AJAX XSLT (XSL dosya ile bir XML dosyası işlemek) yapmak için kullanabileceğiniz genel amaçlı bir PHP dosyasıdır. Bu bir tarayıcıdan bir GET çağrısına geçirilen gerekli (ve isteğe bağlı, arzu edilirse) girişli çalışmak için kurulum olduğunu. p # n ve p # v (aşağıda kod üstündeki yorumlara bakınız) Eğer çıktıyı etkileyen bazı girdi parametresini kullanmak istediğiniz durumlarda XSL belgeye geçirilecek parametre ve değer çiftleri vardır. Bu durumda çıkış tarayıcıya geri yankılandı. Burada web ekran (tablo, ya da ne olursa olsun XSL dosyası şablonunun koymak) için HTML oluşturmak için dönüşüm yoluyla ve XSLT XML veritabanı çalıştırmak için PHP bulunuyor:
<?php
//REQUIRED INPUTS:
// - xml: path to xml document
// - xsl: path to xsl style sheet
// - pCount: number of parameters to be passed to xslt (send zero '0' if none)
//OPTIONAL INPUTS (must have as many as specified in pCount, increment '1' in
//names below up a number for each iteration):
// - p1n: name of first parameter
// - p1v: value of first parameter
//SET Paths
$xmlPath = $_GET['xml'];
$xslPath = $_GET['xsl'];
// Load the XML source
$xml = new DOMDocument;
$xml->load($xmlPath);
$xsl = new DOMDocument;
$xsl->load($xslPath);
// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
//Set Parameter(s), if present
$xslParamCount = $_GET['pCount']; //Check number of xsl parameters specified in GET
for ($i=1; $i<=$xslParamCount; $i++){
$xslParamName = $_GET['p'.$i.'n'];
$xslParamValue = $_GET['p'.$i.'v'];
$proc->setParameter( '', $xslParamName, $xslParamValue); //Set parameters for XSLTProcessor
}
// TRANSFORM
echo $proc->transformToXML($xml);
// SET Mime Type
$mime = "application/xhtml+xml";
$charset = "iso-8859-1";
header("Content-Type: $mime;charset=$charset");
?>
Aşağıda bir XML veritabanı belgesi alarak ve bir web sayfası ekleme için HTML dönüştürerek bir XSL dosyası şablonunun bir örnektir. HTML span etiketleri unutmayın. Tüm xsl etiketleri şablonda HTML etiketleri ve etrafında neler olup bittiğini belirler talimatları işliyoruz. Bu durumda, biz sonuçları filtreleme ve (xsl bakınız: yakın üst param öğeler) XSL dosyasına iletilir girdi parametrelerine dayalı görüntülemek için uygun verileri tercih ediyor:
<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:param name='testId'/>
<!--Input options for following param: localUse, notLocalUse, nottestId, or '' (all)-->
<xsl:param name='matchType'/>
<xsl:template match='/'>
<xsl:choose>
<xsl:when test="$matchType='localUse'">
<xsl:for-each select="//test[@id=$testId and @localUse='yes']">
<xsl:sort select="../@id"/>
<div><xsl:if test='../@localPrefTestId=$testId'><xsl:attribute name='class'>preferredTest</xsl:attribute></xsl:if>
<span class='productStockCode'>
<xsl:if test='../@localPrefTestId=$testId'>
<xsl:attribute name='title'>Preferred test for this product</xsl:attribute>
</xsl:if>
<xsl:if test='../@localPrefTestId!=$testId'>
<xsl:attribute name='title'>Alternate (not preferred) test for this product - see note to right</xsl:attribute>
</xsl:if>
<xsl:value-of select='../@id'/>
</span>
<span class='productStockName'>
<xsl:if test='../@localPrefTestId=$testId'>
<xsl:attribute name='title'>Preferred test for this product</xsl:attribute>
</xsl:if>
<xsl:if test='../@localPrefTestId!=$testId'>
<xsl:attribute name='title'>Alternate (not preferred) test for this product - see note to right</xsl:attribute>
</xsl:if>
<xsl:value-of select='../@name'/>
</span>
<span class='producttestNote'>
<xsl:value-of select='child::localPrefNote'/>
</span>
<span class='productDeleteButton'>
<input onClick='remProdLink(this)' title='Click to remove link to this product' type='image' src='button_tiny_X_grey.bmp'></input>
</span>
</div>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<p>Server Error: GET must specify matchType parameter value of 'localUse', 'notLocalUse', 'nottestId', or '' (for all)</p>
<p>matchType received: <xsl:value-of select='$matchType'/></p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--Note the output method="html" below is required for this to insert correctly into a web page; without this it may nest improperly if any divs are empty-->
<xsl:output method="html" omit-xml-declaration="yes"/>
</xsl:stylesheet>
Tüm xsl testler XPath ifadeleri olduğunu unutmayın.
Bir satır silmek için, satır referans (yukarıdaki kod onClick = 'remProdLink (bu)' bakın) "bu" argüman ile bir JavaScript işlevini çağıran satırda bir düğme var, sonra benzersiz tanımlayıcı kapmak Böyle JavaScript şey satır:
function remProdLink(obj){
//get unique id via Dom from passed in object reference
//edit everything after "obj" below to get to the unique id in the record
var testCode = obj.parentNode.parentNode.firstChild.nextSibling.innerHTML;
//code to send AJAX POST to server with required information goes here
}
Sunucu ucunda, PHP, benzersiz bir tanımlayıcı ile AJAX POST aldığı SimpleXML içine XML veritabanı dosyası yükler, XPath yoluyla düğümü bulur, ve, böyle bir şey kaldırır:
<?php
//Move url encoded post data into variables
$testCode = $_POST['testCode']; //$testCode should be a unique id for the record
//load xml file to edit
$xml = simplexml_load_file('yourDatabase.xml');
//find target node for removal with XPath
$targets = $xml->xpath("//testCode[@id=$testCode]");
//import simpleXml reference into Dom to do removal
$dom2 = dom_import_simplexml($targets[0]);
$dom2->parentNode->removeChild($dom2);
//format xml to save indented tree (rather than one line) and save
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
$dom->save('yourDatabase.xml');
?>
Bir öğeyi düzenlemek için olduğu gibi, bir değişiklikleri kaydetmek düğme ile web sayfasında o öğenin altında bir form oluşturmak, yukarıda belirtildiği gibi silinmesi için birine benzer adlı başka bir JavaScript işlevi vardır ve olabilir düğme çağrı başka bir JavaScript fonksiyonu basıldığında Yine benzer şekilde silme sunucuya AJAX POST. Sadece bu kez POST kaydın benzersiz fikir ile birlikte kayıtlarında düzenlenmiş olabilirdi tüm bilgileri dahil etmek gerekir. PHP dosyası uygun kaydı (silme işlemi için aynı) bulacaksınız, ve o zaman sadece düzenleme PHP bu kaydın parçaları, ya da kaldırmak ve oluşturmak ve kaydın yeni sürümünü ekleyebilirsiniz.
Ben kaç ihtiyacınız detayları emin değilim. Umarım bu size iyi bir başlangıç verir. Bunun herhangi bir bölümünde daha fazla bilgi gerekiyorsa, benim cevap konusunda yorum yapın. İyi şanslar!