我有通过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年有一个名称空间被解决的错误。 无论我尝试什么都没有帮助。
请帮忙解决。
答案 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']