Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TransformXml由于命名空间而找不到节点_Xml_Xpath_Msbuild_Config - Fatal编程技术网

TransformXml由于命名空间而找不到节点

TransformXml由于命名空间而找不到节点,xml,xpath,msbuild,config,Xml,Xpath,Msbuild,Config,我有通过msbuild TransformXml转换的自定义配置文件。 顶部节点具有xlmns属性我无法删除它。 以下是TestSettings.Debug.config的示例: <TestSettings xmlns="http://example.com" type="mytype, mydll" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <Config> <serv

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

<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>

PT7H0M
abc@example.com

以下是源文件的示例:

<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>

PT7H0M
公司ID
我的公司服务

TransformXml抛出“源文档中没有匹配的元素”

我更新了这两个文件,使其具有显式名称空间xmlns:kk=”http://example.com" 所有节点和XPath的前缀都是“kk:”,即

PT7H0M
我收到错误“需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义函数”

我在2010年读到,有一个名称空间的bug得到了解决。 不管我怎么努力,都没有任何帮助


请帮助解决此问题。

您可以使用
local-name()
函数跳过默认名称空间,例如

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


您可以使用
local-name()
函数跳过默认名称空间,例如

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


你可以试试
/*[local-name()='BusinessDayEnd']
是的,就是这样,非常感谢。我还为数组中的一个元素使用了XPath(//*[local-name()='Sender'][1])。@Joel,如果您提交答案,我会将其标记为Solved您可以尝试
/*[local-name()='BusinessDayEnd']
是的,完成了,非常感谢。我还为数组中的一个元素使用了XPath(//*[local-name()='Sender'][1])。@乔尔,如果你提交答案,我会把它标记为已解决
//*[local-name()='Sender'][1]/*[local-name()='Signature']