更改XML文件时出错
本文关键字:出错 文件 XML 更改 | 更新日期: 2023-09-27 18:11:21
我正在尝试更改代码中的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故事的新手,所以欢迎大家的帮助!
谢谢!凯文
您需要设置名称空间管理器,映射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
为例。