更改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文件时出错

您需要设置名称空间管理器,映射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为例。