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
Xpath 使用XMLTasks的ant的XMLPath可以';如果XML文件的元素位于不同的名称空间中,则不匹配_Xpath_Ant_Xmltask - Fatal编程技术网

Xpath 使用XMLTasks的ant的XMLPath可以';如果XML文件的元素位于不同的名称空间中,则不匹配

Xpath 使用XMLTasks的ant的XMLPath可以';如果XML文件的元素位于不同的名称空间中,则不匹配,xpath,ant,xmltask,Xpath,Ant,Xmltask,我尝试使用XMLTasks来替换xml文件中的一些值,但由于不匹配,它一直失败。使用其他工具,它会说我的xpath是正确的,但我无法找出哪里出了问题 这里是我正在搜索的文件: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://www.netbeans.org/ns/project/1"> <type>org.netbeans.modules.api

我尝试使用XMLTasks来替换xml文件中的一些值,但由于不匹配,它一直失败。使用其他工具,它会说我的xpath是正确的,但我无法找出哪里出了问题

这里是我正在搜索的文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
    <type>org.netbeans.modules.apisupport.project</type>
    <configuration>
        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
            <code-name-base>simple.server.extension.cardgame</code-name-base>
            <suite-component/>
            <module-dependencies>
                <dependency>
                    <code-name-base>marauroa.lib</code-name-base>
                    <build-prerequisite/>
                    <compile-dependency/>
                    <run-dependency>
                        <release-version>3</release-version>
                        <specification-version>8</specification-version>
                    </run-dependency>
                </dependency>
                <dependency>
                    <code-name-base>simple.server.lib</code-name-base>
                    <build-prerequisite/>
                    <compile-dependency/>
                    <run-dependency>
                        <release-version>0-1</release-version>
                        <specification-version>0.2</specification-version>
                    </run-dependency>
                </dependency>
            </module-dependencies>
            <public-packages>
                <package>dreamer.card.game</package>
                <package>dreamer.card.game.model.events</package>
                <package>dreamer.card.game.price</package>
                <package>dreamer.card.game.storage</package>
                <package>simple.server.extension</package>
                <package>simple.server.extension.card</package>
            </public-packages>
            <class-path-extension>
                <runtime-relative-path>ext/extension/x.jar</runtime-relative-path>
                <binary-origin>../../Simple Marauroa Java/Card Game Extension/dist/x.jar</binary-origin>
            </class-path-extension>
            <class-path-extension>
                <runtime-relative-path>ext/extension/y.jar</runtime-relative-path>
                <binary-origin>../../Simple Marauroa Java/Card Game interface/dist/y.jar</binary-origin>
            </class-path-extension>
        </data>
    </configuration>
</project>
以下是我尝试运行的任务的相关部分:

<target name="s" depends="-define-xmltasks">
        <propertyselector property="subprojects" match="original.project.dir(.*)" select="\1"/>
        <for list="${subprojects}" param="subproject">
            <sequential>
                <xmltask source="nbproject/project.xml" dest="nbproject/project.xml" failWithoutMatch="true">
                    <replace path="/project/configuration/data/class-path-extension[@{subproject}]/runtime-relative-path/text()" 
                             withText="ext/extension/${extension-lib@{subproject}.dist.jar}"/>
                    <replace path="/project/configuration/data/class-path-extension[@{subproject}]/binary-origin/text()" 
                             withText="${original.project.dir@{subproject}}/dist/${extension-lib@{subproject}.dist.jar}"/>
                </xmltask>
            </sequential>
        </for>
    </target>


@{subproject}解析为一个数字,并已尝试将其更改为一个数字,但效果相同。有什么想法吗?

问题是
项目
数据
元素在不同的名称空间中声明。可以按以下方式在节点谓词中使用
local-name()
属性:

/*[local-name()='project']…

您还可以使用
名称空间uri
属性指定名称空间:

/*[local-name()='project'和namespace-uri()='http://www.netbeans.org/ns/project/1“]…

等等

这是我使用的路径表达式:

/project/configuration/data/class-path-extension[1]/runtime-relative-path/text()
/project/configuration/data/class-path-extension[1]/runtime-relative-path/text()
处理非空(默认)命名空间中不固定名称的一种方法是将名称指定为谓词

这里有一个以这种风格编写的XPath表达式,用于选择所需的节点:

   /*[name()='project']
     /*[name()='configuration']
       /*[name()='data']
         /*[name()='class-path-extension'][1]
           /*[name()='runtime-relative-path']
             /text()
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select=
  "/*[name()='project']
     /*[name()='configuration']
       /*[name()='data']
         /*[name()='class-path-extension'][1]
           /*[name()='runtime-relative-path']
             /text()
  "/>
 </xsl:template>
</xsl:stylesheet>
基于XSLT的验证:

   /*[name()='project']
     /*[name()='configuration']
       /*[name()='data']
         /*[name()='class-path-extension'][1]
           /*[name()='runtime-relative-path']
             /text()
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select=
  "/*[name()='project']
     /*[name()='configuration']
       /*[name()='data']
         /*[name()='class-path-extension'][1]
           /*[name()='runtime-relative-path']
             /text()
  "/>
 </xsl:template>
</xsl:stylesheet>

注意:对于XPath表达式的增量构建和验证,可以使用之类的工具。这个工具以有趣的方式帮助了成千上万的人学习XPath。

我将路径更改为:path=“/*[local-name()='project'和namespace-url()='*[local-name()='data'和namespace-url()='{subproject}]/运行时相对路径/文本()但是我得到一个错误:javax.xml.transform.TransformerException:找不到函数:namespace-url抱歉,它是
namespace-uri()
已更改为uri,但仍然得到:子任务找不到匹配项可能尝试使用此在线xpath测试仪:请参阅以获取另一个有价值的xpath工具。可作为独立的eclipse插件提供。另一个eclipse xpath插件是xpath开发者