我有一个类似下面的WSDL
<wsdl:definitions targetNamespace="http://pk/training/basit/webservice/message/lmsapi/serviceoperations">
<wsdl:types>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://pk/training/basit/webservice/message/lmsapi/serviceoperations">
<xsd:import namespace="http://trainingplan.types.lmsapi.message.webservice.basit.training.pk"/>
...
<xsd:element name="CreateTrainingPlanRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TrainingPlans" type="ns0:TrainingPlans"/>
</xsd:sequence>
<xsd:attribute name="customerCode" type="xsd:string" use="required"/>
<xsd:attribute name="key" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="CreateTrainingPlanResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="ResponseTrainingPlans" type="ns0:ResponseTrainingPlans"/>
</xsd:sequence>
<xsd:attribute name="transactionResult" type="TransactionResultType" use="required"/>
<xsd:attribute name="transactionResultMessage" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="AssignTrainingPlanToLearnerRequest">
...
</xsd:element>
....
</wsdl:definitions>
现在我想使用XPath选择具有名称属性的所有三个元素。当我做了以下我得到了值
<jaxb:bindings schemaLocation="http://localhost:8080/lms/service/lms-api/lmsApi.wsdl" node="/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://pk/training/basit/webservice/message/lmsapi/serviceoperations']/xsd:element[@name='CreateTrainingPlanRequest']">
但是当我尝试选择多个节点时,比如
<jaxb:bindings schemaLocation="http://localhost:8080/lms/service/lms-api/lmsApi.wsdl" node="/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://pk/training/basit/webservice/message/lmsapi/serviceoperations']/xsd:element[@name='CreateTrainingPlanRequest' and @name='CreateTrainingPlanResponse' and @name='AssignTrainingPlanToLearnerRequest']">
然后我收到以下错误
com.sun.istack.SAXParseException2: XPath evaluation of "/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http:/pk/training/basit/webservice/message/lmsapi/serviceoperations']/xsd:element[@name='CreateTrainingPlanRequest' and @name='CreateTrainingPlanResponse' and @name='AssignTrainingPlanToLearnerRequest']" results in empty target node
为什么我得到空节点。我的XPath表达式出了什么问题?
由于
编辑: --------------------------------
<jaxb:bindings schemaLocation="http://localhost:8080/lms/service/lms-api/lmsApi.wsdl" node="/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://pk/training/basit/webservice/message/lmsapi/serviceoperations']/xsd:element[@name='CreateTrainingPlanRequest' or @name='CreateTrainingPlanResponse' or @name='AssignTrainingPlanToLearnerRequest']">
<jaxb:schemaBindings>
<jaxb:package name="pk.training.basit.webservice.messages.lmsapi.serviceoperations.trainingplan" />
</jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="http://localhost:8080/lms/service/lms-api/lmsApi.wsdl" node="/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://pk/training/basit/webservice/message/lmsapi/serviceoperations'](/xsd:element[@name='AddCustomerRequest']) and (/xsd:element[@name='AddCustomerResponse'])">
<jaxb:schemaBindings>
<jaxb:package name="pk.training.basit.webservice.messages.lmsapi.serviceoperations.customer" />
</jaxb:schemaBindings>
</jaxb:bindings>
答案 0 :(得分:1)
当你说
时<jaxb:bindings schemaLocation="http://localhost:8080/lms/service/lms-api/lmsApi.wsdl"
node="/wsdl:definitions/wsdl:types/xsd:schema[
@targetNamespace='http://pk/training/basit/webservice/message/lmsapi/serviceoperations'
]/xsd:element[@name='CreateTrainingPlanRequest' and @name='CreateTrainingPlanResponse'
and @name='AssignTrainingPlanToLearnerRequest']">
您要求同一元素上xsd:element
属性具有三个不同值的任何@name
。这是不可能的。也许你想要
<jaxb:bindings schemaLocation="http://localhost:8080/lms/service/lms-api/lmsApi.wsdl"
node="/wsdl:definitions/wsdl:types/xsd:schema[
@targetNamespace='http://pk/training/basit/webservice/message/lmsapi/serviceoperations'
]/xsd:element[@name='CreateTrainingPlanRequest' or @name='CreateTrainingPlanResponse'
or @name='AssignTrainingPlanToLearnerRequest']">
即。将and
更改为or
。
如果您尝试选择一个xsd:schema
元素,其中包含xsd:element
个具有三个名字的子元素,则以下是您需要的XPath表达式:
node="/wsdl:definitions/wsdl:types/xsd:schema[
@targetNamespace='http://pk/training/basit/webservice/message/lmsapi/serviceoperations'
and xsd:element[@name='CreateTrainingPlanRequest'] and
xsd:element[@name='CreateTrainingPlanResponse'] and
xsd:element[@name='AssignTrainingPlanToLearnerRequest']"