Skip to main content
Inspiring
February 20, 2022
질문

ExtendScriptでXPathを使って属性を取得したい。

  • February 20, 2022
  • 2 답변들
  • 795 조회

evaluateXPathExpressionメソッドを使って属性を取得しようと

 

app.activeDocument.xmlElements.firstItem().evaluateXPathExpression("//Story/@Code");

の様にしたのですが上手くいきません。

 

ExtendScriptではXPathを使って属性を取得する事は出来ないのでしょうか?

이 주제는 답변이 닫혔습니다.

2 답변

Ten A
Community Expert
Community Expert
February 22, 2022

う〜ん…
evaluateXPathExpressionが返すのはXMLElementなんで一発で属性は抜けないのではないかと思います。対象のXMLElementを取ってきた上でxmlAttributeを参照しないとダメでしょうね。

 

alert(app.activeDocument.xmlItems[0].evaluateXPathExpression ("//*[@newStory]")[0].xmlAttributes[0].name)

ワンライナーで書いちゃうとこんな感じですか…

Inspiring
February 22, 2022

evaluateXPathExpressionでは直接属性を取得する事は出来なさそうなのですね

有難うございました。

Inspiring
February 23, 2022

evaluateXPathExpressionメソッドでは有りませんが

 

XPathで

/Root/Story/@id

で指定できる要素があるとすると

var resultArray = resolve("/document[@location=first]/XML-element[@location=first]/XML-element[@name=\"Story\"]/XML-attribute[@name=\"id\"]");

for(var i = 0; i < resultArray.length; i++){
    
    resultArray[i].value = String(i + 1);
}

とすると属性を取得出来て、値を変更する事が出来ました。

Ten A
Community Expert
Community Expert
February 21, 2022

使えますね。
ちょっとサンプル用意してみました。XMLの構造に依存するものなので参考程度にしかならないでしょうが、ご自身の書いたコードと照らし合わせて見て下さい。

var st = "";
var root = app.activeDocument.xmlElements[0];
var xp = root.evaluateXPathExpression ( "//*[@newStory]") ;
var sf = function(a,b){return a.id>b.id;}
xes.sort(sf);
for (var i=0; i<xp.length; i++ ) 
st += "i:"+xp[i].xmlAttributes.itemByName ("id").value+"\n";
alert(st);
Inspiring
February 21, 2022

サンプル有難うございます。

 

ExtendScriptではXPathを使って(直接)属性を取得する事は出来ないのでしょうか?

です。

私の言葉足らずの様で申し訳ありません。

 

evaluateXPathExpression ( "//*[@newStory]") ;

の戻り値は、newStory属性を持つ要素の配列ですよね

 

直接、属性を取得したいと思ったしたいです。