通过 ajax 将 XML 属性与 Elements 一起发送到 C# 控制器方法并解析以保存
Posted
技术标签:
【中文标题】通过 ajax 将 XML 属性与 Elements 一起发送到 C# 控制器方法并解析以保存【英文标题】:Send XML attributes along with Elements via ajax to C# controller method and parse to save 【发布时间】:2020-11-07 16:16:23 【问题描述】:通常要在网页上编辑的 XML 元素作为输入名称发送过来 示例:
然后在 C# 控制器方法中:
List<string> keys = Request.Form.Keys.Cast<string>().Where(item => item[0] == '/' && item[1] == '/').ToList();
foreach (var key in keys)
var item = xDoc.SelectSingleNode(key, manager);
if (item != null)
item.InnerText = Request.Form[key];
else
throw new InvalidOperationException("Could not decode parameter with key " + key + " and value " + Request.Form[key]);
通常,XML 元素在 Key Collection 的 Request.Form 部分中发送,因此 1 个关键示例是:
"//IVS-NONINST-REC/IVS-NONINST-REC-REST[1]/IVS-SEC-DIAG-CDS[1]/IVS-SEC-DIAG-T[1]"
但是,我需要发送一些属性来解析和保存这些属性。 我不知道如何“正确”发送它们,如果我发送属性就像
"//IVS-NONINST-REC/IVS-NONINST-REC-REST[1]/IVS-SEC-DIAG-CDS[1]/IVS-SEC-DIAG-T[1]/IVS-SEC-DIAG"
代码循环遇到 throw new InvalidOperationException。
-
如何正确发送属性?
如何正确解析 C# 中的属性以保存它们?
该元素及其属性的 XML 如下所示
<IVS-SEC-DIAG-T IVS-SEC-DIAG="C56.9" IVS-SEC-POA="">test</IVS-SEC-DIAG-T>
更新,完整的xml(为简洁删除了一些)
<IVS-NONINST-REC xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<IVS-NONINST-REC-KEY IVS-REC-TYP="2" IVS-TM-STAMP="210549" IVS-ADJ-KEY="5">
</IVS-NONINST-REC-KEY>
<IVS-NONINST-REC-REST IVS-PAT-ID="333089302">
<IVS-SEC-DIAG-CDS>
<IVS-SEC-DIAG-T IVS-SEC-DIAG="C56.9" IVS-SEC-POA="">test</IVS-SEC-DIAG-T>
</IVS-NONINST-REC-REST>
</IVS-NONINST-REC>
虽然我可以在 xDoc Innerhtml 中看到所有 xml 元素和属性,但 xDoc 认为没有属性 这是屏幕截图
【问题讨论】:
我已经读了几遍了,但我不确定我是否完全理解。让我们从这个开始:1)你到底是什么意思“发送”? 2)什么是“经理”? 3) 您是否验证过 xDoc 中存在与您的密钥匹配的项目? 发送 - 从带有 ajax 的 html。对于此属性“IVS-SEC_DIAG”,我只是将其附加到元素 /IVS_SEC_DIAG-T[1] 之后 Manager 是 XmlNamespaceManager manager = new XmlNamespaceManager(new NameTable()); ,我看到它确实添加了一些命名空间,例如 manager.AddNamespace("ns0", "..... 是的 - 这个 IVS-SEC-DIAG" 是我添加的一个键 - 但是以请求形式发送 XML 数据以进行解析我不确定是否应该将属性添加到末尾。 .. 你试过xDoc.SelectSingleNode(key)
吗?命名空间不是必需的。
【参考方案1】:
您应该在 xpath 中的属性名称中添加 @
。
//.../IVS-SEC-DIAG-T[1]/@IVS-SEC-DIAG
【讨论】:
以上是关于通过 ajax 将 XML 属性与 Elements 一起发送到 C# 控制器方法并解析以保存的主要内容,如果未能解决你的问题,请参考以下文章