2012-01-09 19 views
0

我從Lightroom中導出了Flash網絡庫。它使用XML文件來顯示每張照片的標題。我只想從這個XML文件中提取描述標籤,以便我可以將它發送給校對員。我一直在嘗試使用JavaScript來做到這一點,但它只是不工作。我有的代碼能夠讓我得到所有描述的部分列表。我的代碼遍歷描述標籤,但一旦遇到空標籤:它(使用Chrome調試器)會拋出一個未捕獲的TypeError:無法讀取null的屬性「數據」並停止執行。 我試圖檢查「null!==」,但我猜測代碼仍然運行,因爲我仍然得到錯誤。Javascript - 無法從嵌套的XML文件中獲取數據 - 無法讀取null的屬性

到目前爲止,我確信XML是邪惡的。 XML文件的

樣品:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<mediaGroup> 
    <amgVersion version="1.3" /> 
    <groupInfo> 
    <bunch of="data I don't care about" /> 
    </groupInfo> 
    <sizes> 
    <bunch of="data I don't care about" /> 
    </sizes> 

    <media totalGallerySize="104"> 
    <item> 
     <title></title> 
     <description>Yo! Look at that monkey on the bars</description> 
     <imageID /> 
     <mediaType/> 
     <renditions> 
     <rendition size="large" /> 
     <rendition size="medium" /> 
     <rendition size="small" /> 
     <rendition size="thumb" /> 
     </renditions> 
    </item> 
    <item> 
     <title></title> 
     <description>It's trying to parse XML files ahhaha</description> 
     <imageID /> 
     <mediaType/> 
     <renditions> 
     <rendition size="large" /> 
     <rendition size="medium" /> 
     <rendition size="small" /> 
     <rendition size="thumb" /> 
     </renditions> 
    </item> 
    <item> 
     <title></title> 
     <description></description> 
     <imageID /> 
     <mediaType/> 
     <renditions> 
     <rendition size="large" /> 
     <rendition size="medium" /> 
     <rendition size="small" /> 
     <rendition size="thumb" /> 
     </renditions> 
    </item> 
    <item> 
     <title></title> 
     <description>That missing description is going to make him angry</description> 
     <imageID /> 
     <mediaType/> 
     <renditions> 
     <rendition size="large" /> 
     <rendition size="medium" /> 
     <rendition size="small" /> 
     <rendition size="thumb" /> 
     </renditions> 
    </item> 
    </mediaGroup> 

對於我的代碼,我有以下幾點:

<script type="text/javascript"> 
    function loadXMLDoc(dname) { 
if (window.XMLHttpRequest) 
    { 
    xhttp=new XMLHttpRequest(); 
    } 
else 
    { 
    xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xhttp.open("GET",dname,false); 
xhttp.send(); 
return xhttp.responseXML; 
    } //end function 

    xmlDoc=loadXMLDoc("group.xml"); 
    var z=xmlDoc.getElementsByTagName("item"), nameELEM; 
    document.write(z.length); 
    for (i=0;i<=z.length;i++){ 
    nameELEM=z[i].getElementsByTagName("description")[0]; 
    if (typeof nameELEM.firstChild.data !== "undefined") { //This is the line the error quotes 
     //handle property xxx of documentFragment as required 
     document.write(nameELEM.firstChild.data + "<br />"); 
    } 
    } 
</script> 

第38行:遺漏的類型錯誤:無法讀取空 的特性 '數據' 38行= IF (type of nameELEM.firstChild.data!==「undefined」){

+0

的問題可能是你如何檢查空。 參見:http://stackoverflow.com/questions/776950/javascript-undefined-undefined – 2012-01-09 21:41:33

+0

@Diodeus我畏懼,我不明白:-( – Mallow 2012-01-09 21:51:52

+0

請「是行不通的」,並詳細闡述「代碼堅持......」,你看到了什麼實際的錯誤信息(或者其他意想不到的客觀行爲)呢?另外,我無法理解「標籤之間爲空」。在內存中的一個對象你想描述什麼? – LarsH 2012-01-09 21:53:15

回答

2

而不是:

if (nameELEM.firstChild.data !== null) 

嘗試:

if (typeof nameELEM.firstChild.data !== "undefined"

+0

我已經改變了它,並在上面的代碼中試過,但我仍然收到相同的錯誤:-( – Mallow 2012-01-10 14:38:52

+0

alert(type of nameELEM.firstChild.data) - 看到你得到了什麼 – 2012-01-10 14:41:41

+0

這很奇怪,執行就停止了。 。我確實警告(我+ typeof nameELEM.firstChild.data),結果如下:1string,2string,它停在那裏,它沒有給我第三或第四個。 – Mallow 2012-01-10 15:05:34