我尝试使用NSTask
(或Process
,因为这是Swift)来执行xmllint
来格式化一些XML数据。问题是任务似乎挂了。
我使用xmllint
而不是XMLDocument.xmlData(withOptions:)
因为输出更符合我的需要。我正在编写一个工具来编辑现有文件,我想尽量减少影响。
我尝试在挂起时杀死xmllint
进程,并获得输出的前84 1/2行。对于该测试用例,输出应该是大约10,000行,并且大多数内容涉及仅嵌套几个级别的元素,因此它不是非常复杂的任务。
我是否正确设置了流程和管道?文档含糊不清,我很难找到直接适用的例子。
代码:
public static func format(xml: XMLDocument) -> Data?
{
let data = xml.xmlData
let task = Process()
let inPipe = Pipe()
let outPipe = Pipe()
task.launchPath = "/usr/bin/xmllint"
task.arguments = ["--format", "-"]
task.standardInput = inPipe
task.standardOutput = outPipe
task.launch()
inPipe.fileHandleForWriting.write(data)
inPipe.fileHandleForWriting.closeFile()
task.waitUntilExit() // Hangs :(
return outPipe.fileHandleForReading.availableData
}