0

我是信息开发人员。

我需要使用存储在 Excel 表中的文件名创建.dita文件。

.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>

请为此提供解决方案。

4

3 回答 3

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

结束子

于 2013-02-19T11:51:34.320 回答
2

假设您知道如何在 Python 中编程并运行 Python 应用程序,您可以尝试以下方法,将文件名放在列表中。如果您需要从 Excel 中读取,那么您可以使用 Python 中读取 Excel 文件的包之一,并使用它来代替下面的 filelist。

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()
于 2013-02-14T01:10:49.053 回答
1

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

<title>Title goes here</title>

此外,您不需要以下标记,因为这些是 PTC 的 Arbortext Editor 添加的处理说明:

<?Pub Inc?>
<?Pub Caret -1?>
于 2013-02-17T15:26:29.190 回答