Для меня - здесь менее запутанный способ сделать socket.setTimeout
var request=require('https').get(
url
,function(response){
var r='';
response.on('data',function(chunk){
r+=chunk;
});
response.on('end',function(){
console.dir(r); //end up here if everything is good!
});
}).on('error',function(e){
console.dir(e.message); //end up here if the result returns an error
});
request.on('error',function(e){
console.dir(e); //end up here if a timeout
});
request.on('socket',function(socket){
socket.setTimeout(1000,function(){
request.abort(); //causes error event ↑
});
});
Вы не указали свой входной документ, но я предполагаю, что это следующее, взятое из документации xmlstarlet :
<xml>
<table>
<rec id="1">
<numField>123</numField>
<stringField>String Value</stringField>
</rec>
<rec id="2">
<numField>346</numField>
<stringField>Text Value</stringField>
</rec>
<rec id="3">
<numField>-23</numField>
<stringField>stringValue</stringField>
</rec>
</table>
</xml>
xmlstarlet изменяет файл, но результат отправляется на стандартный вывод, не сохраняется в исходном файле. Используйте другую опцию --inplace
, чтобы изменить файл на месте:
$ xml ed --inplace -u "/xml/table/rec[@id='3']/@id" -v 5 rec.xml
Затем:
$ cat rec.xml
<?xml version="1.0"?>
<xml>
<table>
<rec id="1">
<numField>123</numField>
<stringField>String Value</stringField>
</rec>
<rec id="2">
<numField>346</numField>
<stringField>Text Value</stringField>
</rec>
<rec id="5">
<numField>-23</numField>
<stringField>stringValue</stringField>
</rec>
</table>
</xml>
Кстати, этот вопрос, кажется, задает нечто очень похожее на этот вопрос .
EDIT: как было предложено @npostavs, этот параметр указан в справке:
$ xml edit --help
...
-L (or --inplace) - edit file inplace
...
xml edit --help
– npostavs 26 March 2015 в 00:37_:
перед каждым элементом как , определенным в документах в разделе1.3. A More Convenient Solution
– LeoLozes 8 September 2017 в 10:14