我有一个像这样加载的“普通” XmlDocument :
<root>
<element1 />
<element2></element2>
</root>
并希望在加载对象模型时使用命名空间来限定元素
<abc:root xmlns:abc="urn:something">
<abc:element1 />
<abc:element2></abc:element2>
</abc:root>
在写出来之前。
我有一个像这样加载的“普通” XmlDocument :
<root>
<element1 />
<element2></element2>
</root>
并希望在加载对象模型时使用命名空间来限定元素
<abc:root xmlns:abc="urn:something">
<abc:element1 />
<abc:element2></abc:element2>
</abc:root>
在写出来之前。
不幸的是,您不能只更改节点的命名空间。这些属性是只读的。
您将无法通过递归或使用 XSLT 创建新文档。
一个肮脏的技巧是,如果您正在从存储/字符串读取 XML,那么您可以扩展 XmlTextReader 以更改加载的文档的命名空间(尽管我不知道是否会有所帮助,因为您似乎暗示您已经有一个加载的文档,诚然,它肯定来自某个地方)。
例如:
class MyXmlReader : XmlTextReader
{
public MyXmlReader(TextReader r) : base(r)
{
}
public override string Prefix
{
get
{
return "abc";
}
}
public override string NamespaceURI
{
get
{
return "urn:something";
}
}
}
然后你可以像XmlReader r = new MyXmlReader(new StringReader("<root/>"));
或类似地使用它。
-= 编辑 =-
现在我想它有一个更明显的方法,而不是覆盖 XmlWriter :)
例如
class MyXmlWriter : XmlTextWriter
{
public MyXmlWriter(TextWriter w)
: base(w)
{
}
public override void WriteStartElement(string prefix, string localName, string ns)
{
base.WriteStartElement("abc", localName, "urn-something");
}
}
任务完成。