我是DXL的新手,从事的工作可能很简单。 我想解析当前模块,并为具有给定ID(在下面调用IDNUM)的每个对象获取以下数据,这些数据不为空: IDNUM-对象文本-具有较低层次结构级别的所有文本,并且对所有对象来说都是相同的东西。
使用代码可能会更容易理解。到目前为止,看起来像这样:
Object o
Object ol
Link l
Module m = current Module
For o in entire(m) do{
if (o."IDNUM" != ""){
print o."IDNUM" ""
print o."text" ""
//HERE I WOULD LIKE TO ALSO PRINT EVERY TEXT IN OBJECT "LOWER" THAN o
for l in o --> "*" do{
ol = target(l)
print ol."text" ""
//HERE I WOULD LIKE TO ALSO PRINT EVERY TEXT IN OBJECT "LOWER" THAN ol
}
}
}
基本上,我既有对象的ID和标题,也有喜欢的对象,但下面的文本却没有。换句话说,我的代码将“模仿”函数right click>copy>copy with hierarchy
我怎样才能做到这一点?不幸的是,我发现没有什么非常有用的。
非常感谢
答案 0 :(得分:1)
这是您概述的草图代码:
Author
这里需要修改一些语法,但是最大的变化是您处理链接项目的方式。链接在源模块中“处于活动状态”,但它们仅存储有限的信息,其中大多数是链接的源和目标模块,以及它们接触的对象的绝对数量。因此,您需要先检查另一侧的模块是否打开,然后再尝试从中读取文本。
并且由于您试图遍历整个链接结构,因此需要一个递归元素。
我可能最终会得到这样的东西:
Object o
Object ol
Link l
Module m = current Module
For o in entire(m) do{
if (o."IDNUM" != ""){
print o."IDNUM" ""
print o."text" ""
//HERE I WOULD LIKE TO ALSO PRINT EVERY TEXT IN OBJECT "LOWER" THAN o
for l in o --> "*" do{
ol = target(l)
print ol."text" ""
//HERE I WOULD LIKE TO ALSO PRINT EVERY TEXT IN OBJECT "LOWER" THAN ol
}
}
}
注意!根据链接结构的大小,即您拥有多少级(以及是否有圆形链接模式),这可能是一项相当耗费资源的任务,并且可以使用“打印”命令以外的其他方法(例如例如,将其附加到word文件中,这样您就可以知道它在出错之前走了多远)
祝你好运!
编辑:
此脚本现在可以进行单个级别的操作,而不是递归地进行下去,但是应该报告子对象。
//turn off run limit timer- this might take a bit
pragma runLim , 0
Object o
Module m = current Module
// Recursive function- assumes each object has a text attribute- will error otherwise
void link_print(Object obj) {
print obj."text" "\n"
Link out_link
Object next_obj = null
for out_link in obj -> "*" do {
// Set the next object in the chain
next_obj = target ( out_link )
// This might return null if the module is not loaded
if ( null next_obj ) {
// Load the module in read-only mode, displayed and in standard view
read ( fullName ( ModName_ target ( out_link ) ) , true , true )
// Try and resolve out 'target' again
next_obj = target ( out_link )
// If it doesn't work, print a message so we can figure it out
if ( null next_obj ) {
print "Error Accessing Object " ( targetAbsNo ( out_link ) )""
} else {
//Iterate down structure
link_print ( next_obj )
}
} else {
//Iterate down structure
link_print ( next_obj )
}
}
}
for o in entire(m) do {
// Note that I cast the result of o."IDNUM" to a string type by appending ""
if (o."IDNUM" "" != ""){
print o."IDNUM" "\n"
// Recurse
link_print(o)
print "\n"
}
}
答案 1 :(得分:0)
尊敬的罗素(以及其他所有人)
我刚刚遍历了您提供给我的那段代码,它就可以了。。。。但不是我想要的。看来我的解释不是很清楚。抱歉(我不是母语人士)。
我并不是要获得所有链接,而只是获得Object text
,它是写在当前链接所指向的对象正下方的。
这是我的文件的样子
object1 (with IDNUM) : "Title_doc_1" --> (link) objectA "Title_doc_2"
object2 : "some_text" objectB : "some_text"
object3 : "some_text" objectC : "some_text"
({object1
可以指向许多其他objectA
,但我已经解决了。)
我在上面提供的代码解析“ doc_1”,并打印"IDNUM" "Title_doc_1" "Title_doc_2"
我正在寻找的不仅是objectA
,而且还有objectB
和objectC
,它们分别位于objectA
(和object2
和object3
也一样,但过程相同。
我让自己明白了...