Announcement

Collapse
No announcement yet.

XML Attribut in Abhängigkeit zu einem anderen Attribut des Tags finden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XML Attribut in Abhängigkeit zu einem anderen Attribut des Tags finden

    Hallo,

    ich habe folgende XML-Struktur:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <publication Name="test" SpreadCount="3" RealLeadingPage="1" PageCount="4" FitTo="width" Browse="top">
    	<spread  Id="ub6" LeadingPage="1" PageCount="1" Width="595.275590551" Height="841.889763778" Scale="1.0" >
    	</spread>
    	<spread  Id="ubc" LeadingPage="2" PageCount="2" Width="1190.551181102" Height="841.889763778" Scale="1.0" >
    	</spread>
    	<spread  Id="uc3" LeadingPage="4" PageCount="1" Width="595.275590551" Height="841.889763778" Scale="1.0" >
    	</spread>
    </publication>
    Mir ist die ID des Spreads bekannt und ich möchte parallel dazu einen anderen Wert haben. Bisher habe ich das Ganze XML durchgeparst (foreach), die Position gemerkt und dann nochmal geparst. Mal abgesehen dass das nicht elegant ist, kommt es auch zu Fehlern, die ich mir nicht erklären kann. Deswegen hoffe ich auf einen Tipp, um das Ganze zu vereinfachen. Hier mein Ansatz:

    Code:
    function getXMLAttrib ($doc, $tagPath, $tagPath2, $parallelValue) {
    
    $targets = new DOMXpath($doc);
    $targetDatas = $targets->query($tagPath);
    
    if (!is_null($targetDatas)) {
    	foreach ($targetDatas as $targetData) {
    	$nodes = $targetData->childNodes;
    		foreach ($nodes as $counter => $node) {
    		$value = $node->nodeValue;
    		if ($value == $parallelValue) {
    			$result = $counter;
    		}
    		}
    	}
    $targetDatas2 = $targets->query($tagPath2);
    
    if (!is_null($targetDatas2)) {
    	$result = array();
    	foreach ($targetDatas2 as $targetData2) {
    	$nodes2 = $targetData2->childNodes;
    		foreach ($nodes2 as $node2) {
    		$value2 = $node2->nodeValue;
    		$result[] = $value2;
    		}
    	}
    	return $result[$counter];
    	}
    	}
    }
    Danke für Eure Hilfe.
    Gruss
    Dom

  • #2
    Das sollte mit

    http://de.wikipedia.org/wiki/XPath

    http://php.net/manual/de/simplexmlelement.xpath.php

    gehen
    Christian

    Comment


    • #3
      Hallo,

      wenn dir die ID bekannt ist, dann wäre es doch einfacher, den entsprechenden Knoten mittels GetElementById zu extrahieren.

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Gelöst

        Nach langem gegurke funktioniert das. Danke für die Tipps, ich habe beides ausprobiert, aber letzters erscheint mir am sinnvollsten:

        Code:
        $publishFile = $rootfolder . $docname . '/publish.xml';
        $publishXML = new DOMDocument('1', 'utf-8');
        $publishXML->preserveWhiteSpace = true;
        $publishXML->load($publishFile);
        
        $xp = new DomXPath($publishXML); 
        
        //finde Width, wenn die Id der Variablen "$idNumber" entspricht	
        $containerWidth = $xp->query("//*[@Id = '".$idNumber."']/@Width")->item(0)->nodeValue; 
        $containerHeight = $xp->query("//*[@Id = '".$idNumber."']/@Height")->item(0)->nodeValue; 
        $scaleFactor = $xp->query("//*[@Id = '".$idNumber."']/@Scale")->item(0)->nodeValue;
        Gruss

        Comment

        Working...
        X