我有一个“普通”XmlDocument加载如下:
<root>
<element1 />
<element2></element2>
</root>
并希望在加载对象模型时使用名称空间限定元素
<abc:root xmlns:abc="urn:something">
<abc:element1 />
<abc:element2></abc:element2>
</abc:root>
在写出来之前。
答案 0 :(得分:0)
不幸的是,您不能只更改节点的命名空间。这些属性是只读的。
通过递归或使用XSLT,您将无法创建新文档。
答案 1 :(得分:0)
一个肮脏的技巧是,如果您从商店/字符串中读取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 :)
e.g。
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");
}
}
完成工作。