假设我有以下 xml 代码
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<catalog>
<person>
<name>John</name>
<surname>Smith</surname>
</person>
<person>
<name>Abe</name>
<surname>Lincoln</surname>
</person>
<person>
<name>James</name>
<surname>Bond</surname>
</person>
</catalog>
Run Code Online (Sandbox Code Playgroud)
我想添加一个新节点,让我们说以下内容:
<person>
<name>Tony</name>
<surname>Stark</surname>
</person>
Run Code Online (Sandbox Code Playgroud)
我如何在节点 js 中做到这一点?我的意思是我有一个文件(确切地说是节点 js express 中的 /routes/index.js),我希望能够添加/修改现有的 xml 文件。我试过fs.writeFile(),但这会写入一个全新的文件,并且fs.appendFile()在最后一个节点之后添加了一个标头(?xml + 编码和东西)和根节点,所以我无法插入它进入目录节点。我也无法摆脱 xml 声明标头。
我一直在使用 .builder() 来做到这一点,它看起来像这样
router.post('/addnode', function (req, res) {
var obj = {name: "Tony", surname: "Stark"};
var fs = require('fs');
var xml2js = require('xml2js');
var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
fs.writeFile('public/test.xml', xml, function (err) { …Run Code Online (Sandbox Code Playgroud) 我有一个可以打开第三方应用程序的软件。为了让他们相互通信,我有一个桥接解决方案(只是一个永远不会显示的假 wpf 窗口),它在彼此之间发送消息并使用简单数据管理 XML 文件。一切正常,直到应用程序打开超过 10-15 分钟(甚至可以处于空闲状态),然后我尝试关闭它 - 然后我的软件因“配额不足异常”而崩溃。当我的软件崩溃时,第 3 方应用程序有时会保持打开状态并仍在运行。
在过去的三天里我一直在寻找解决方案。没有任何帮助。“catch Win32Exception”无法捕获它。更改虚拟内存中的分页文件没有帮助。它可以在具有不同规格的多个工作站上重现 - 每个工作站都有足够的资源。内存/磁盘使用率一点也不高。第 3 方应用程序没有向我的软件发送大量消息,它在关闭时最多发送 1-2 条消息。通信是同步的。我尝试查看发布在这里的 BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailure: https: //github.com/dotnet/wpf/issues/137 - 无济于事。指向 wpf 窗口的指针不为空。我还检查了线程。
异常详细信息:
System.ComponentModel.Win32Exception
HResult=0x80004005
Message=Not enough quota is available to process this command
Source=WindowsBase
StackTrace:
at MS.Win32.UnsafeNativeMethods.PostMessage(HandleRef hwnd, WindowMessage msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Interop.HwndTarget.UpdateWindowSettings(Boolean enableRenderTarget, Nullable`1 channelSet)
at System.Windows.Interop.HwndTarget.UpdateWindowPos(IntPtr lParam)
at System.Windows.Interop.HwndTarget.OnWindowPosChanged(IntPtr lParam)
at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr …Run Code Online (Sandbox Code Playgroud)