c# - 如何在 XmlDocument 中的所有 XmlElements 中强制使用前缀?
问题描述
我需要像下面这样创建 XML。因为目标系统的延迟。我需要在所有节点前面都有前缀。所有节点都需要存在“ns0”前缀。
<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:ns0="http://top-secret">
<ns0:MainMessage>
<ns0:Date>1</ns0:Date>
<ns0:Field1>2</ns0:Field1>
<ns0:Field2>3</ns0:Field2>
</ns0:MainMessage>
</ns0:RootElement>
没有架构。我需要根据用户输入添加节点。这是将节点添加到“ns0:MainMessage”元素的代码示例:
XmlDocument xml = new XmlDocument();
xml.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?><ns0:RootElement xmlns:ns0=\"http://top-secret\"><ns0:MainMessage></ns0:MainMessage></ns0:RootElement>");
XmlElement mainMessageElement = xml.DocumentElement["ns0:MainMessage"];
XmlElement newElement = mainMessageElement.OwnerDocument.CreateElement("Date");
newElement.Prefix = "ns0";
newElement.InnerText = "thisIsTest;
mainMessageElement.AppendChild(newElement);
这会产生如下输出:
<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:ns0="http://top-secret">
<ns0:MainMessage>
<Date>thisIsTest</Date>
</ns0:MainMessage>
</ns0:RootElement>
虽然我需要输出“日期”元素以“ns0”为前缀的输出,如“ns0:日期”。像这样:
<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:ns0="http://top-secret">
<ns0:MainMessage>
<ns0:Date>thisIsTest</ns0:Date>
</ns0:MainMessage>
</ns0:RootElement>
如何强制此 Date 元素具有 ns0 前缀?
解决方案
您实际上需要将元素限定为正确的命名空间:
var newElement = mainMessageElement.OwnerDocument.CreateElement(
"Date", "http://top-secret");
newElement.Prefix = "ns0";
但是请注意,使用XDocument
API 完成所有这些操作可能会更容易。
推荐阅读
- javascript - 更新firebase时如何让ejs自动重新渲染
- mysql - 如何将特定行/单元格的类型从 int 更改为 varchar
- android - 我安装了 android studio 3.1.2 并显示错误
- database - 在mongodb中查找日期之间的数据?
- python - 变异算法效率
- python - 管理不同环境的配置
- kubernetes - 无法连接到服务器:拨打 tcp 192.168.99.100:8443:getsockopt:没有到主机的路由
- r - 如何使用 dplyr 链中数据的第一行更改 col 名称
- algorithm - Kotlin - 按类别和子类别排序的列表
- python - 而不是写很多和如何以pythonic方式缩短你的代码