.net 为什么在复制XML节点时会丢失名称空间引用?
我有一个XML文档(InfoPath表单),看起来类似于:.net 为什么在复制XML节点时会丢失名称空间引用?,.net,xml,infopath,xml-namespaces,.net,Xml,Infopath,Xml Namespaces,我有一个XML文档(InfoPath表单),看起来类似于: <my:ClientMaintenance xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-07-06T07:04:54"> <my:Payments> </my:Payments> <my:Payment> <my:Amount></my
<my:ClientMaintenance xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-07-06T07:04:54">
<my:Payments>
</my:Payments>
<my:Payment>
<my:Amount></my:Amount>
<!-- Several other nodes -->
</my:Payment>
</my:ClientMaintenance>
为什么名称空间不能再被引用?您需要显式地将前缀添加到XmlNamespaceManager:
XPathNavigator blankPayment = GetBlankPaymentNode(navigator).CreateNavigator();
XmlNamespaceManager nsmngr = new XmlNamespaceManager(blankPayment.NameTable);
nsmngr.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003" +
"/myXSD/2009-07-06T07:04:54");
现在您可以通过前缀引用名称空间。谢谢。如果我丢失了对XmlNamespaceManager的引用,则
blankPayment.NameTable
是否仍包含my
命名空间?它仍将包含命名空间,但您需要XmlNamespaceManager才能访问它。如果丢失了引用,还可以实例化一个新的引用,然后再次添加名称空间。
XPathNavigator blankPayment = GetBlankPaymentNode(navigator).CreateNavigator();
XmlNamespaceManager nsmngr = new XmlNamespaceManager(blankPayment.NameTable);
nsmngr.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003" +
"/myXSD/2009-07-06T07:04:54");