2017-08-10 66 views
0

這是我一直在摔跤幾個小時,雖然在不同的非工作形式。如何在Indesign中使用XML循環混合內容?

我有一個簡單的XML,我通過文件導入>導入XML

<?xml version="1.0" encoding="UTF-8"?> 
<doc> 
    <page> 
     <p id="1"> 
      hello <test /> alien world <br /> from space 
     </p> 
     <p id="2"> 
      hello <test /> another alien world <br /> from space 
     </p> 
    </page> 
</doc> 

現在我的目標很簡單,即遍歷所有元素。這個工作,直到我想在我的p標籤內的(混合)內容迭代。

// check version 
if (parseInt (app.version) > 4 && app.documents.length > 0){ 
main(); 
} 


function main() { 
// get active document 
var doc = app.activeDocument; 


// get xml that has been imported 
var xmlDocument = doc.xmlElements[0]; 


// get page elements 
const page_elements = xmlDocument.evaluateXPathExpression('/doc/page') 


// iterate over page elements 
for(var x = 0; x < page_elements.length; x++) { 
    // within each page element look for p elements 
    const p_elements = page_elements[x].evaluateXPathExpression('./p'); 

    for(var y = 0; y < p_elements.length; y++) { 

     var child_elements = p_elements[y].evaluateXPathExpression('./node()'); 

     for (var z = 0; z < child_elements.length; z++) { 
     $.writeln(child_elements[z].markupTag.name); 
     $.writeln(child_elements[z].contents); 
     } 
    } 
} 
} 

問題是,似乎沒有記住子項目的順序。

輸出 - 根據擴展工具包 - 是「外星人來自太空測試br」,而它應該是「hello測試外星人來自太空的世界」。

我自己的基礎,包括使用XmlElements或XmlItems的,但沒有可用這裏的文檔(http://jongware.mit.edu/idcs4js/index_XML%20Suite.html)上佔上風:-(

那我現在在想一個更多鈔票替代方法是閱讀通過JavaScript的XML文件,從字符串創建一個XML對象,並從這裏走的更遠。

回答

0

你的輸出是正確的,它僅僅是不是你所期望的。

p標籤的內容是在所有文本這個標籤,所以你得到

1 tag name - p 

2 tag contents = hello alien world from space 

3 name of the next tag in the collection -> test 

4 name of the next tag in the collection -> br 

測試節點和br節點都沒有任何內容 - 它們是空節點。

您可以嘗試插入<test> some text</text>以查看它是如何工作的。結果應該是

p 
hello alien world from space 
test 
some text 
br