Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么在复制XML节点时会丢失名称空间引用?_.net_Xml_Infopath_Xml Namespaces - Fatal编程技术网

.net 为什么在复制XML节点时会丢失名称空间引用?

.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

我有一个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: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");