我正在尝试在代码中更改XML文件。我在网上找到了一些很好的例子,并试图做同样的事情,但它不起作用。当我使用简单的XML文档尝试我的代码时没有错误,但是我的XML文档出现了这个错误:
Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.
这是我的XML文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ns2:VATConsignment xmlns="http://www.minfin.fgov.be/InputCommon" xmlns:ns2="http://www.minfin.fgov.be/VATConsignment" VATDeclarationsNbr="@aantal_aangiftes@">
<ns2:VATDeclaration SequenceNumber="@aangifte_nr@">
<ns2:Declarant>
<VATNumber>@firma_btw@</VATNumber>
<Name>@firma_naam@</Name>
<Street>@firma_straat@</Street>
<PostCode>@firma_pnr@</PostCode>
<City>@firma_wpl@</City>
<CountryCode>BE</CountryCode>
<EmailAddress>@firma_email@</EmailAddress>
<Phone>@firma_tel@</Phone>
</ns2:Declarant>
<ns2:Period>
<ns2:Month>@maand@</ns2:Month>
<ns2:Quarter>@kwart@</ns2:Quarter>
<ns2:Year>@jaar@</ns2:Year>
</ns2:Period>
<ns2:Data>
<ns2:Amount GridNumber="0">@VAK0@</ns2:Amount>
<ns2:Amount GridNumber="1">@VAK1@</ns2:Amount>
<ns2:Amount GridNumber="2">@VAK2@</ns2:Amount>
<ns2:Amount GridNumber="3">@VAK3@</ns2:Amount>
<ns2:Amount GridNumber="44">@VAK44@</ns2:Amount>
<ns2:Amount GridNumber="45">@VAK45@</ns2:Amount>
<ns2:Amount GridNumber="46">@VAK46@</ns2:Amount>
<ns2:Amount GridNumber="47">@VAK47@</ns2:Amount>
<ns2:Amount GridNumber="48">@VAK48@</ns2:Amount>
<ns2:Amount GridNumber="49">@VAK49@</ns2:Amount>
<ns2:Amount GridNumber="54">@VAK54@</ns2:Amount>
<ns2:Amount GridNumber="55">@VAK55@</ns2:Amount>
<ns2:Amount GridNumber="56">@VAK56@</ns2:Amount>
<ns2:Amount GridNumber="57">@VAK57@</ns2:Amount>
<ns2:Amount GridNumber="59">@VAK59@</ns2:Amount>
<ns2:Amount GridNumber="61">@VAK61@</ns2:Amount>
<ns2:Amount GridNumber="62">@VAK62@</ns2:Amount>
<ns2:Amount GridNumber="63">@VAK63@</ns2:Amount>
<ns2:Amount GridNumber="64">@VAK64@</ns2:Amount>
<ns2:Amount GridNumber="65">@VAK65@</ns2:Amount>
<ns2:Amount GridNumber="66">@VAK66@</ns2:Amount>
<ns2:Amount GridNumber="71">@VAK71@</ns2:Amount>
<ns2:Amount GridNumber="72">@VAK72@</ns2:Amount>
<ns2:Amount GridNumber="81">@VAK81@</ns2:Amount>
<ns2:Amount GridNumber="82">@VAK82@</ns2:Amount>
<ns2:Amount GridNumber="83">@VAK83@</ns2:Amount>
<ns2:Amount GridNumber="84">@VAK84@</ns2:Amount>
<ns2:Amount GridNumber="85">@VAK85@</ns2:Amount>
<ns2:Amount GridNumber="86">@VAK86@</ns2:Amount>
<ns2:Amount GridNumber="87">@VAK87@</ns2:Amount>
<ns2:Amount GridNumber="88">@VAK88@</ns2:Amount>
<ns2:Amount GridNumber="91">@VAK91@</ns2:Amount>
</ns2:Data>
<ns2:ClientListingNihil>@nihil_listing@</ns2:ClientListingNihil>
<ns2:Ask Payment="NO" Restitution="NO"/>
<ns2:Comment>@commentaar@</ns2:Comment>
</ns2:VATDeclaration>
</ns2:VATConsignment>
这是我写的代码:
XmlDocument doc2 = new XmlDocument();
doc2.Load(@"C:\Users\Kevin\Desktop\xsd\TemplateAangifte.xml");
XmlNode aangeverNode = doc2.SelectSingleNode(@"/ns2:VATConsignment/ns2:VATDeclaration/ns2:Declarant");
尝试加载XmlNode
时会触发错误。
我对XML故事很陌生,所以欢迎每一个帮助!
谢谢!
凯文
答案 0 :(得分:1)
您需要设置命名空间管理器,映射在XML源文件中声明的每个命名空间,并在XPath表达式中使用带有前缀的。 您在映射中声明的前缀应该在您的XPath选择器中使用。前缀不必与源文件中使用的前缀相同(可能是与原始前缀相同,但不一定是。)
如果您要从源文件中访问任何元素,以下是需要添加的声明:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc2.NameTable);
nsmgr.AddNamespace("ns2", "http://www.minfin.fgov.be/VATConsignment");
// Not necessary unless you decide to use an unprefixed element from your source
nsmgr.AddNamespace("ns0", "http://www.minfin.fgov.be/InputCommon");
要访问未加前缀的元素,您可以使用ns0:EmailAddress
。