<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>
这个 Payment Payments 节点。所以每当 添加付款 按钮,我需要:
Payment
Payments
付款
my 命名空间!代码如下:
my
public void btnAddPaymentClicked(object sender, ClickedEventArgs e) { var navigator = e.Source.CreateNavigator(); var blankPayment = GetBlankPaymentNode(navigator).CreateNavigator(); // new XmlNamespaceManager(blankPayment.NameTable).HasNamespace("my") == false // WHY??? } private XmlDocument GetBlankPaymentNode(XPathNavigator navigator) { var blankPayment = navigator.SelectSingleNode(FullBlankPaymentXPath, NamespaceManager); var blankXml = new XmlDocument(); blankXml.LoadXml(blankPayment.OuterXml); var schema = new XmlSchema(); schema.Namespaces.Add("my", MyNamespaceUri); // Set elsewhere and != null blankXml.Schemas.Add(schema); return blankXml; }
为什么命名空间不能再被引用?
您需要显式地将前缀添加到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");