Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Get xml Elements of a paragraphs

Contributor ,
Oct 09, 2019 Oct 09, 2019

Hi,

 

 How to get all xml elements in a selected paragraph to get the aid:pstyle count of a paragraph.  Because a paragraph style is got overwritten of 2nd style. how to get pstyle count using xml element or paragraph?

 

Please refer the attached screenshot. selected paragraph xml element is 2nd li of of ul and p of ul next element.  If i get accosicated xml element its returning ul element so i will get the 1st li element of ul but selected paragraph doest have that text. How to check aid pstyle of selected paragraphs text element or paragraph? selected elements of a paragraphs.

 

 

1.png

 

 
 

 

 

xml.png

TOPICS
Scripting
1.1K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Advocate , Oct 13, 2019 Oct 13, 2019

Try this code sudka_k:

 

//////////////////////////////////////////////////////////////////////////////////
var myDoc = app.documents[0];
var myNode = app.selection[0];
var totalAttributes = [];
var myId = [myNode];
if(myNode.constructor.name == "XMLElement"){
    for(var xid = 0; xid < myNode.paragraphs[0].words.length; xid++){
        var allXML = myNode.paragraphs[0].words[xid].associatedXMLElements;
        for(var x = 0; x < allXML.length; x++){
            var match = false;
            for(var lid =

...
Translate
Advocate ,
Oct 10, 2019 Oct 10, 2019

Hi sudha_k,

Try this code:

////////////////////////////////////////////////////////////////////////////////////

var totalAttributes = [];
getAttr(app.selection[0].associatedXMLElements);
alert(totalAttributes);
function getAttr(myNodes){
    for(var i = 0; i < myNodes.length; i++){
      if(myNodes[i].xmlAttributes.item("aid:pstyle").isValid){

            totalAttributes.push(myNodes[i].xmlAttributes.item("aid:pstyle").value.toString());

        }
    if(myNodes[i].parent.constructor.name != "Document") getAttr([myNodes[i].parent]);
    }
}

////////////////////////////////////////////////////////////////////////////////////

Best

Sunil

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Oct 11, 2019 Oct 11, 2019
Hi,
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Oct 11, 2019 Oct 11, 2019

Hi,

 

 Thanks for your reply...

 

Please see my screenshots 1 & 2. In Document, i am selecting the element p (last element) and if i select the paragraph of the of that p and run the code it returns empty. Because of the tag structure.

 

Paragraphs is merged with the tag of "p" from "ul/li" and the bottom "p" tag. so if i get associatedXML element its return ul element only but selection of the paragraph text tags are one "p" tag from "ul/li" and the bottom "p". 

 

I want to check if selected paragraph contains 2 pstyle i need to place enter mark in front the element of the 2nd pstyle element. i dont know how to check this?

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Oct 11, 2019 Oct 11, 2019
Are you saying that you will select a tag not the text in it? If is it so a little modification in code is required.
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Oct 11, 2019 Oct 11, 2019

Try this code:

//////////////////////////////////////////////////////////////////////////////////
var totalAttributes = [];
if(app.selection[0].constructor.name == "XMLElement"){
    getAttr([app.selection[0]]);
    }
if(totalAttributes.length > 1){
    app.selection[0].insertTextAsContent("\r", XMLElementPosition.beforeElement);
    }
//////////////////////////////////////////////////////////////////////////////////
function getAttr(myNodes){
    for(var i = 0; i < myNodes.length; i++){
        if(myNodes[i].xmlAttributes.item("aid:pstyle").isValid){
            totalAttributes.push(myNodes[i].xmlAttributes.item("aid:pstyle").value.toString());
            }
        if(myNodes[i].parent.constructor.name != "Document") getAttr([myNodes[i].parent]);
        }
    }
//////////////////////////////////////////////////////////////////////////////////

 

Best

Sunil

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Oct 11, 2019 Oct 11, 2019

Hi sudha_k,

Try this code : 

 

//////////////////////////////////////////////////////////////////////////////////

var totalAttributes = [];
if(app.selection[0].constructor.name == "XMLElement"){
    getAttr([app.selection[0]]);
    }
else if(app.selection[0].constructor.name == "InsertionPoint" || app.selection[0].constructor.name =="Character" || app.selection[0].constructor.name =="Word" || app.selection[0].constructor.name == "Paragraph" || app.selection[0].constructor.name == "Text"){
    getAttr(app.selection[0].associatedXMLElements);
    }
alert(totalAttributes);
//////////////////////////////////////////////////////////////////////////////////
function getAttr(myNodes){
    for(var i = 0; i < myNodes.length; i++){
        if(myNodes[i].xmlAttributes.item("aid:pstyle").isValid){
            totalAttributes.push(myNodes[i].xmlAttributes.item("aid:pstyle").value.toString());
            }
        if(myNodes[i].parent.constructor.name != "Document") getAttr([myNodes[i].parent]);
        }
    }

//////////////////////////////////////////////////////////////////////////////////

 

Best

Sunil

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Oct 12, 2019 Oct 12, 2019

Hi Sunil,

 

   The same is returning.  I think that i did not say clearly my requirement.

 

  Please see my both screenshots. As per below screenshot, xml element "p" (outside of ul element) proceeded with ul tag with two list items.

 

XML_1.png

 

  See the below screenshot, 1st paragraph is "ul/p" and 2nd paragraph is combination of ul/p and p (outside tag).

 

XML_2.png

 

 As per xml elements, its a combination of li/p and p and it contains 2 pstyle.   But in paragraph text (selection) style got overrides.  The originals style for p tag (selection) is "bch_tx" but its wrongly here.

 

XML_3.png

 I need to findout these kind of paragraphs and need to place enter infront that element (ie., element which contains 2nd pstyle) Whether using paragraph or xml element. I am trying in both way but not working.

 

 The sample output is:

 

 

XML_4.png

 

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Oct 13, 2019 Oct 13, 2019
LATEST

Try this code sudka_k:

 

//////////////////////////////////////////////////////////////////////////////////
var myDoc = app.documents[0];
var myNode = app.selection[0];
var totalAttributes = [];
var myId = [myNode];
if(myNode.constructor.name == "XMLElement"){
    for(var xid = 0; xid < myNode.paragraphs[0].words.length; xid++){
        var allXML = myNode.paragraphs[0].words[xid].associatedXMLElements;
        for(var x = 0; x < allXML.length; x++){
            var match = false;
            for(var lid = 0; lid < myId.length; lid++){
                if(myId[lid].id == allXML[x].id){
                    match = true;
                    }
                }
            if(!match) myId.push(allXML[x]);
            }
        }
    getAttr(myId);
    }
if(totalAttributes.length > 1){
    myNode.insertTextAsContent("\r", XMLElementPosition.beforeElement);
    }
//////////////////////////////////////////////////////////////////////////////////
function getAttr(myNodes){
    for(var i = 0; i < myNodes.length; i++){
        if(myNodes[i].xmlAttributes.item("aid:pstyle").isValid){
            totalAttributes.push(myNodes[i].xmlAttributes.item("aid:pstyle").value.toString());
            }
        if(myNodes[i].parent.constructor.name != "Document") getAttr([myNodes[i].parent]);
        }
    }
//////////////////////////////////////////////////////////////////////////////////

 

Best

Sunil

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines