【发布时间】:2021-05-19 16:12:46
【问题描述】:
我在多个子目录中有多个大型 xml 文件。我正在尝试整理所有 xml 文件中的 uuid。
这里是 uuid.xslt 文件
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="uuids">
<xsl:copy>
<xsl:apply-templates select="uuid">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="groups">
<xsl:copy>
<xsl:apply-templates select="groupUuid">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="history">
<xsl:copy>
<xsl:apply-templates select="historyInfo">
<xsl:sort select="@versionUuid"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这里是 python 代码,我可以打印所有目录和子目录中的所有 .xml 文件,并解析它们。我需要为新的输出路径创建相同的目录结构
iimport os
import lxml.etree as ET
inputpath = "C:\\projects\\test\\uuid\\"
xsltfile = "C:\\projects\\test\\uuid\\uuid.xslt"
outpath = "C:\\projects\\test\\output"
dir = []
for dirpath, dirnames, filenames in os.walk(inputpath):
structure = os.path.join(outpath, dirpath[len(inputpath):])
if not os.path.isdir(structure):
os.mkdir(structure)
for filename in filenames:
if filename.endswith(('.xml')):
dir = os.path.join(dirpath, filename)
print(dir)
dom = ET.parse(dir)
xslt = ET.parse(xsltfile)
transform = ET.XSLT(xslt)
newdom = transform(dom)
outfile = open(outpath + "\\" + filename, 'a')
outfile.write(ET.tostring(newdom,pretty_print=True).decode())
我在输出中发现了一些问题
- 目标输出文件应存储在与源相同的目录结构中。我能够创建相同的目录结构,但我无法将文件传递到相同的目录,所有文件都仅存储在根位置。
例如: 来源:
C:\projects\xmlformat\uuid\new.xml C:\projects\xmlformat\uuid\patches.xml C:\projects\xmlformat\uuid\application_a-0000e2csv-22c6-8000-9ba2-011c48011c48_72930.xml C:\projects\xmlformat\uuid\application_a-0000e2ff-22c6-8000-9ba2-011c48011c48_97397.xml
目标应如下创建
C:\projects\test\output\new.xml C:\projects\test\output\patches.xml C:\projects\test\output\application_a-0000e2csv-22c6-8000-9ba2-011c48011c48_72930.xml C:\projects\test\output\application_a-0000e2ff-22c6-8000-9ba2-011c48011c48_97397.xml
提前致谢
【问题讨论】: