2013-04-18 7 views
9

das ist mein XML-Dokument: -get Eltern-Element-Attributwert

<root> 
    <child_1 entity_id = "1" value="india"> 
     <child_2 entity_id = "2" value="gujarat"> 
      <child_3 entity_id = "3" value="Ahemdabad"/> 
      <child_4 entity_id = "4" value="Surat"/> 
      <child_5 entity_id = "5" value="Rajkot"/>   
     </child_2> 
    </child_1> 
</root> 

das ist mein Javascript HTML-Code: -

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    <script> 
     var xml; 
     var ind_sex; 
     $.get(
     "code.xml", 
     null, 
     function (data) { 
      xml = data; 
     }, 
     "xml" 
    ); 
     function get_list() { 
      var city = $('#name').val(); 
      alert(city); 
      var xPath = '//*[@value = "city"]' + 
          '/../../@value'; 

      var iterator = xml.evaluate(xPath, xml.documentElement, null, 
       XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); 
      var thisNode = iterator.iterateNext(); 
      var str = ''; 
      while (thisNode) { 
       if (str) { 
        str += ', '; 
       } 
       str += thisNode.textContent; 
       thisNode = iterator.iterateNext(); 
      } 

      $("#result").text(str); 
     } 
    </script> 
</head> 
<body> 
<input type="text" id="name"></input> 
    <input type="button" name="button" value="Search" onclick="get_list()"> 
    <div id="result"> 
    </div> 
</body> 
</html> 

hier versuche ich bin zur Eingabe in Namen Textbox Stadt, wenn sein Spiel auf meine xml-datei gibts dann meinen landnamen zurück.
Ich bekomme keinen Fehler, aber kein Ergebnis.
Ich denke, Problem in meinem xPath pleasee helfen mir dabei.

+2

Sie ersetzt offenbar Ihre Frage mit etwas völlig anderes, nachdem jemand versucht hat, es zu beantworten. Warum nicht einfach eine neue Frage beginnen? – Barmar

+0

Ich stimme @Barmar völlig zu. Es ist nicht empfehlenswert, die Frage nur am Vortag der Frist komplett zu ändern. Bitte stellen Sie eine * neue * Frage, wenn Sie ein neues Problem haben. –

Antwort

7

Verwendung:

var xPath = '//*[@value = "' + city + '"]/../../@value'; 

Ein äquivalenter Ausdruck ist:

var xPath = '//*[*/*[@value = "' + city + ']]/@value'; 
+0

seine Arbeit ... :) ... –

+0

@JackPhp, Gern geschehen –

+0

@DitreNovatchev Sie sind nicht gleichwertig, IMO. Ich würde lieber die zweite Version verwenden, da es kein Zwei-Wege-Tree-Walking erfordert (auch in Richtung der Wurzel). Ich bin nicht sicher, ob ich wieder Dokumente finden könnte, aber etwas flüstert, dass ältere Implementierungen von Xpath-Engines Probleme damit hatten. Ich bin mir auch nicht ganz sicher, ob Sie wirklich asterix verwenden wollen. Sollten keine Punkte darin erscheinen, wie 'var xPath = '//.[./.[@value ="' + city + ']]/@ value'; '? Vergleichen Sie [das] (http: // www. mulberrytech.com/quickref/XSLT_1quickref-v2.pdf). –

1

Soweit ich mich erinnere, Listen funktionieren nicht so ... sie sind Variablen mit einem bestimmten Wert zugeordnet ist, so ist es mehr wie:

list($a, $b, $c) = [1, 2, 3];

Wie auch immer, warum nicht Werfen Sie einen Blick auf den Abschnitt "Listen" auf der Seite phpredis? Es ist eine der empfohlenen PHP-Clients für Redis, und Beispiele dafür sind ganz klar