2012-12-31 37 views
5

Próbuję nauczyć się, jak odczytać dane strony internetowej w pliku XML. To jest statyczna strona HTML. Nie chcę serwera WWW i nie mogę używać Ajax. Plik XML jest lokalny (w tym samym katalogu, co plik HTML). Chcę, żeby to działało w przeglądarce Chrome.Odczytywanie pliku XML przy użyciu kodu JavaScript z lokalnego folderu

Co muszę zrobić, to:

  1. Czytaj plik XML na razie strona onLoad.
  2. Użyj innerHTML, aby wstawić dane XML do elementu div.

Mój problem polega na przeczytaniu pliku XML. Wszystkie przykłady, które znalazłem myślę, że będą działać tylko wtedy, gdy działa serwer WWW, którego muszę unikać.

+1

Nie można bez AJAX – PitaJ

+1

możliwy duplikat [Czy javascript dostęp do systemu plików?] (Http://stackoverflow.com/questions/1087246/can-javascript-access-a-filesystem) – Barmar

+0

Gdzie jest XML? Strona serwera lub przeglądarka? –

Odpowiedz

2

Jeśli czytasz inny plik, jedynym sposobem, aby to zrobić z przodu JS jest inne żądanie (ajax). Jeśli byłby to plik node.js, byłby inny, ponieważ węzeł może uzyskać dostęp do systemu plików. Alternatywnie, jeśli dostaniesz xml do łańcucha javascript na tej samej stronie, możesz nim manipulować. Istnieje wiele dobrych bibliotek (parseXML jquery).

+1

Myślę, że HTML i XML są w tym samym systemie co przeglądarka. –

+0

tak, są, ale nie możesz mieć obu. Jeśli uruchomisz plik html ze skryptem w nim, ten plik również nie może być plikiem xml.Mimo to możesz mieć trochę xml w zmiennej javascript. Punktem, który robiłem było to, że nie można załadować innego pliku bez ajax –

1

Skoro tylko kierowanie Chrome, można spojrzeć na File API. Musisz poprosić użytkownika, aby wybrał plik lub umieścił go w określonym obszarze strony, co może być czymś, czego wolałbyś uniknąć, lub nie. Pomocne powinno być następujące HTML5 Rocks article.

1

Zakładając HTML, XML i przeglądarki są na tej samej maszynie, możesz spróbować za pomocą iframe w kodzie HTML, który odwołuje się do XML przy użyciu adresu URL podobnego pliku: \.

0

Można zrobić coś takiego:

<html> 
<head> 
<script type="text/javascript"> 
//If using jQuery, select the tag using something like this to manipulate 
//the look of the xml tags and stuff. 
$('#xframe').attr('style', 'thisxmltag.....'); 
</script> 
</head> 
<body> 
... 
<frame id="xframe" src="the_xml_doc"></src> 
</body> 
</html> 
0
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp = new XMLHttpRequest(); 
} 
else {// code for IE6, IE5 
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.open("GET", file_Location, false); 
xmlhttp.send(); 
xmlDoc = xmlhttp.responseXML; 
document.getElementById(your_div_id).value =   
xmlDoc.getElementsByTagName(The_tag_in_xml_you_want_to_display) 
[0].childNodes[0].nodeValue; 
0

Działa z IE11

<head> 
    // To be hidden with a better method than using width and height 
    <OBJECT id="data1" data="data.xml" width="1px" height="1px"></OBJECT> 

    // to work offline 
    <script src="lib/jquery-2.2.3.min.js"></script> 
</head> 

<body> 
    <script> 
    var TheDocument = document.getElementById("data1").contentDocument; 
    var Customers = TheDocument.getElementsByTagName("myListofCustomers"); 
    var val1 = Customers[0].getElementsByTagName("Name")[0].childNodes[0].nodeValue; 
0

Original odpowiedź tutaj: https://stackoverflow.com/a/48633464/8612509

tak, to może być trochę późno do imprezę, ale ma to pomóc komukolwiek, kto zgwałcił swoje włosy szukając rozwiązania o to.

Po pierwsze, CORS musi być dozwolone w przeglądarce, jeśli nie korzystasz z pliku HTML z serwera. Po drugie, stwierdziłem, że fragmenty kodu, o których większość ludzi wspomina w tego rodzaju wątkach, nie działają przy ładowaniu lokalnych plików XML. Spróbuj tego (przykład zaczerpnięty z oficjalnych docs):

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'file.xml', true); 

xhr.timeout = 2000; // time in milliseconds 

xhr.onload = function() { 
    // Request finished. Do processing here. 
    var xmlDoc = this.responseXML; // <- Here's your XML file 
}; 

xhr.ontimeout = function (e) { 
    // XMLHttpRequest timed out. Do something here. 
}; 

xhr.send(null); 

(1 arg) jest ignorowany w xhr.open jeśli odnosi się do lokalnego pliku metoda i asynchroniczny (3rd Arg) jest prawdziwe domyślnie , więc naprawdę musisz wskazać plik, a następnie przeanalizować wynik! =)

Powodzenia!

Powiązane problemy