gpt4 book ai didi

xpath - 通过 xpath 从 wsdd 获取服务不工作(xmltask)

转载 作者:行者123 更新时间:2023-12-03 16:22:30 25 4
gpt4 key购买 nike

我正在尝试获取 XPath“/deployment/service”。在本站测试:
http://www.xmlme.com/XpathTool.aspx

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org /axis/wsdd/providers/java">

<service name="kontowebservice" provider="java:RPC" style="rpc" use="literal">
<parameter name="wsdlTargetNamespace" value="http://strategies.spine"/>
<parameter name="wsdlServiceElement" value="ExposerService"/>
<parameter name="wsdlServicePort" value="kontowebservice"/>
<parameter name="className" value="some.package.internal.KontoWebServiceImpl_WS"/>
<parameter name="wsdlPortType" value="Exposer"/>
<parameter name="typeMappingVersion" value="1.2"/>
<operation xmlns:operNS="http://strategies.spine" xmlns:rtns="http://www.w3.org/2001/XMLSchema" name="expose" qname="operNS:expose" returnQName="exposeReturn" returnType="rtns:anyType" soapAction="">
<parameter xmlns:tns="http://www.w3.org/2001/XMLSchema" qname="in0" type="tns:anyType"/>
</operation>
<parameter name="allowedMethods" value="expose"/>
<parameter name="scope" value="Request"/>

</service>
</deployment>
我绝对不知道为什么它总是告诉我我的 xpath 不匹配......
这可能很愚蠢,但我错过了什么吗?
编辑
感谢 Dimitre Novatchev 的回答,我找到了解决方法:
<xmltask failwithoutmatch="true" report="false">
<fileset dir="${src.gen}/" includes="**/*-deploy.wsdd" />
<copy path="//*[local-name()='service']" buffer="tmpServiceBuf" append="true" />
</xmltask>
<xmltask failwithoutmatch="true" report="false" source="${basedir}/env/axis/WEB-INF/server-config.wsdd" dest="${build.stage}/resources/WEB-INF/server-config.wsdd">
<insert path="//*[local-name()='transport'][last()]" buffer="tmpServiceBuf" position="after" />
</xmltask>
用 xmltask 绑定(bind)命名空间(这是让我头疼的工具)似乎是不可能的。上面的代码成功了。

最佳答案

问题 :此 XML 文档有一个默认 namespace 。 XPath 认为任何无前缀的名称都在“无命名空间”中。它试图选择 /deployment/service其中元素 deploymentservice位于无命名空间且不选择任何节点,因为在提供的 XML 文档中没有此类元素位于“无命名空间”中(它们都在“http://xml.apache.org/axis/wsdd/”命名空间中)

解决方案 :使用承载 XPath 的语言(例如 C#、Jave、XSLT 或您可能正在使用的任何其他语言)将前缀(例如 x: )绑定(bind)到命名空间 "http://xml.apache.org/axis/wsdd/" .

然后,改变:
/deployment/service

/x:deployment/x:service
现在最后一个 XPath 表达式正确地选择了所需的节点。

关于xpath - 通过 xpath 从 wsdd 获取服务不工作(xmltask),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2991463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com