首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Extendscript中访问XML属性名称

在Extendscript中访问XML属性名称
EN

Stack Overflow用户
提问于 2015-03-23 21:14:21
回答 2查看 3.3K关注 0票数 1

我正在尝试解析extendscript中的xml对象,特别是处理属性。我知道我可以通过以下方式访问xml属性

代码语言:javascript
复制
xmlObj.@attributename

代码语言:javascript
复制
xmlObj.attributes()

返回所有属性的列表,但我还需要属性名称,而不仅仅是值。有没有什么方法可以得到一些东西,比如带有名称和值的关联数组/对象?

(我将extendscript用于illustrator CS6)

谢谢你,阿诺

EN

回答 2

Stack Overflow用户

发布于 2015-03-23 21:56:41

下面的代码应该可以让你上手了。还可以看看XMLElement Object

代码语言:javascript
复制
var main = function() {
  // create some xml and write it to file
  var root = new XML("<root/>");
  var child = new XML("<child/>");
  child.@string = "Hello Attribute"; // jshint ignore:line
  child.@num = 23; // jshint ignore:line
  root.appendChild(child);
  var file = new File("~/Desktop/test.xml");
  var xml = root.toXMLString();
  file.open("W");
  file.write(xml);
  file.close();

  // get the current doc
  var doc = app.activeDocument;
  // import the xml
  doc.importXML(file);
  // get the elements
  var xmlroot = doc.xmlElements[0];
  var xmlchild = xmlroot.xmlElements[0];
  // loop all attributes of element "child"
  // and write them into the console
  for (var i = 0; i < xmlchild.xmlAttributes.length; i++) {
    var attr = xmlchild.xmlAttributes[i];
    $.writeln(attr.name);
  }
};
main();
票数 1
EN

Stack Overflow用户

发布于 2015-04-27 21:58:01

我找到了一种用正则表达式解决它的方法

代码语言:javascript
复制
function getAttributes(xml_node_str) {
  // select the start tag <elem >
  var reg_exp = /<[^>]*>/;
  var start_tag_str = reg_exp.exec(xml_node_str);

  // extract the attributes
  reg_exp = /[^"\s]*="[^"]*"/g;
  var result;
  var attributes = [];

  while ((result = reg_exp.exec(start_tag_str)) !== null) {
    // the attribute (name="value")
    var attr = result[0];
    // array containing name and "value"
    var attr_arr = attr.split('=');
    // delete the "'s
    attr_arr[1] = attr_arr[1].substr(1, attr_arr[1].length - 2);

    attributes.push(attr_arr);
  }
  return attributes;
}

我仍然使用Extendscripts/Illustrators xml-class解析xml,然后手动提取属性

代码语言:javascript
复制
var xml = <root><obj a1="01" a2="02" ></obj></root > ;

var attributes = getAttributes(xml.obj.toXMLString());

for (var i = 0; i < attributes.length; i++) {
  alert(attributes[i][0] + ' -> ' + attributes[i][1]);
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29211201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档