2012-07-21 105 views
0

我作为信息开发人员工作。从Excel工作表中的文件名生成DITA文件

我需要创建.dita文件,并将文件名存储在Excel表格中。

.dita文件是XML文件。文件的结构应该相同。结构如下:

<?xml version="1.0" encoding="UTF-8"?> 
<!--Arbortext, Inc., 1988-2011, v.4002--> 
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" 
"concept.dtd"> 
<?Pub Inc?> 
<concept id="concept-1-43B80068" xml:lang="en"> 
<title></title><?Pub Caret -1?> 
<shortdesc></shortdesc> 
<conbody> 
<p></p> 
</conbody> 
</concept> 

,然后我需要创建一个映射这些文件如下:

<map xml:lang="en"> 
<topicref href = "topic1.dita"> 
<topicref href = "topic2.dita"> 
</topicref> 
</map> 

请提供一个解决的办法。

回答

2

假设您知道如何使用Python进行编程并运行Python应用程序,您可以尝试以下将文件名放入列表的位置。如果您需要从Excel中读取数据,那么您可以使用其中一个包来读取Python中的Excel文件,并使用它来代替下面的文件列表。

import os 

filelist = ["topic1", 
"topic2" 
] # array of dita files 

basedir = r'C:/DITA_files/' 

# create files 
if not os.path.exists(basedir): 
    os.mkdir(basedir) 

conceptstr = '''<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" 
"concept.dtd"> 
<?Pub Inc?> 
<concept id="concept-1-%s" xml:lang="en"> 
<title></title><?Pub Caret -1?> 
<shortdesc></shortdesc> 
<conbody> 
<p></p> 
</conbody> 
</concept> 
''' 

id_len = 8 
# create concept files and map 
for file in filelist: 
    print 'Writing ' + basedir + file + '.dita' 
    cf = open(basedir + file +'.dita', 'w') 
    cf.write(conceptstr) % [random.choice(string.ascii_letters) for n in xrange(id_len)] 
    cf.close() 

map = open(basedir + 'mymap.ditamap','wt') 

map.write('<map xml:lang="en">') 
for file in filelist: 
    map.write(r'''<topicref href="%s.dita"/> 
''' % (register, register)) 
    map.write('</map>') 
    map.close() 
1

请注意您的DITA标记无效。所有DITA主题必须包含一个包含内容的元素<title>。您可能希望将一些占位符文本添加为​​<title>元素的内容,例如:

<title>Title goes here</title> 

而且,你不需要下面的标记,因为这些都是处理由PTC的Arbortext编辑器添加了说明:

<?Pub Inc?> 
<?Pub Caret -1?> 
2

你也可以在Excel中为它创建一个VBA宏。选择其中包含文件名的单元格并运行宏。 注意:要获得你需要把它们输出双引号的两倍“”

Sub CreateDitaConcept() 
Dim sFileName As String 
Dim iFileNum As Integer 

'Read filename from selected cell 
sFileName = Selection.Value 
'Get a free file number 
iFileNum = FreeFile 
'Open the file for output 
Open sFileName For Output As iFileNum 
'Print text to the file 
Print #iFileNum, "<?xml version=""1.0"" encoding=""UTF-8""?>" 
Print #iFileNum, "<!-- Arbortext etc -->" 
Print #iFileNum, "<!DOCTYPE concept PUBLIC ""-//OASIS//DTD DITA Concept//EN"" ""concept.dtd"">" 
Print #iFileNum, "<concept id=""concept_id"" xml:lang=""en"">" 
Print #iFileNum, "<title>Concept title</title>" 
Print #iFileNum, "<shortdesc></shortdesc>" 
Print #iFileNum, "<conbody>" 
Print #iFileNum, "<p>paragraph</p>" 
Print #iFileNum, "</conbody>" 
Print #iFileNum, "</concept>" 
'Close file 
Close #iFileNum 

末次