由于名称空间,TransformXml无法找到节点

时间:2016-04-14 13:47:21

标签: xml xpath msbuild config

我有通过msbuild TransformXml转换的自定义配置文件。 顶级节点具有xlmns属性。 我无法删除它。 以下是TestSettings.Debug.config的示例:

google_compute_engine

以下是源文件示例:

<TestSettings xmlns="http://example.com" type="mytype, mydll"
xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<Config>
    <servers>
        <main>
            <add Name="PROD" Description="Production Server" URL="http://myserver.example.com"
                 DefaultPort="" Environment="Production" xdt:Transform="Insert" xdt:Locator="Match(Name)"/>
        </main>
    </servers>
    <BusinessDayStart xdt:Transform="InsertBefore(//BusinessDayEnd)">PT7H0M</BusinessDayStart>
    <Senders>
        <Sender >
            <Email xdt:Transform="InsertAfter(//Sender[1]/Signature)" >abc@example.com</Email>
        </Sender>
    </Senders>
</Config>

TransformXml抛出&#34;源文档中的任何元素都不匹配&#34;

我更新了两个文件,使其具有显式的命名空间xmlns:kk =&#34; http://example.com" 并且所有节点和XPath都以&#34; kk为前缀:&#34;即

<TestSettings xmlns="http://example.com" type="mytype, mydll">
<Config>
    <servers>
        <main>
        </main>
    </servers>
    <BusinessDayEnd>PT7H0M</BusinessDayEnd>
    <Senders>
        <Sender>
            <CompanyId>CompanyID</CompanyId>
            <Signature> My Company Service </Signature>
        </Sender>
    </Senders>
</Config>

我收到错误&#34;需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数&#34;

我读到2010年有一个名称空间被解决的错误。 无论我尝试什么都没有帮助。

请帮忙解决。

1 个答案:

答案 0 :(得分:3)

You can skip default namespaces by using the local-name() function, e.g.,

//*[local-name()='BusinessDayEnd']

and

//*[local-name()='Sender'][1]/*[local-name()='Signature']