当前位置: 首页 > 知识库问答 >
问题:

Cvc elt。1: 找不到元素“soap:Envelope”的声明

秋阳旭
2023-03-14

目前,我正在为SOAP XML使用XSD,但当我在FREEFORMATTER上运行SOAP XML和XSD时。COM,我收到以下错误:

Cvc-elt.1:找不到元素声明“肥皂:信封”...第1行,第170列

这是我的SOAP XML:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Cancel_OrderLine xmlns="http://tempuri.org/">
      <Data>
        <Delivery>
          <Delivery_No>1605000194</Delivery_No>
          <Reason>qwertyu</Reason>
        </Delivery>
        <Delivery>
          <Delivery_No>1605000194</Delivery_No>
          <Reason>qwerty</Reason>
        </Delivery>
      </Data>
    </Cancel_OrderLine>
  </soap:Body>
</soap:Envelope>

这是我的XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <xs:element name="Cancel_OrderLineReq">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Data">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Delivery" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:int" name="Delivery_No"/>
                    <xs:element type="xs:string" name="Reason"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我应该怎么做才能消除错误?

共有2个答案

咸高谊
2023-03-14

如果根据xsd验证xml,可能需要初始化builderFactory以“了解名称空间”——默认情况下为false。

final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
final DocumentBuilder builder = builderFactory.newDocumentBuilder();
builder.parse(...);
马嘉勋
2023-03-14

首先,您必须向XSD的xs: Schema元素添加Target Namespace="http://tempuri.org/",以便XSD应用于XML有效负载中使用的命名空间。

然后,您可以采取以下任一方法:更改XML或更改XSD。根据您控制的文件进行选择。

添加

xsi:schemaLocation="http://tempuri.org/ tempuri.xsd
                    http://schemas.xmlsoap.org/soap/envelope/ 
                    http://schemas.xmlsoap.org/soap/envelope/

到soap:信封:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xsi:schemaLocation="http://tempuri.org/ tempuri.xsd
                                   http://schemas.xmlsoap.org/soap/envelope/ 
                                   http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Cancel_OrderLine xmlns="http://tempuri.org/">
      <Data>
        <Delivery>
          <Delivery_No>1605000194</Delivery_No>
          <Reason>qwertyu</Reason>
        </Delivery>
        <Delivery>
          <Delivery_No>1605000194</Delivery_No>
          <Reason>qwerty</Reason>
        </Delivery>
      </Data>
    </Cancel_OrderLine>
  </soap:Body>
</soap:Envelope>

添加

<xs:import namespace="http://schemas.xmlsoap.org/soap/envelope/"   
           schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"/>

到XSD的xs: Schema元素:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
           targetNamespace="http://tempuri.org/">

  <xs:import namespace="http://schemas.xmlsoap.org/soap/envelope/"   
             schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"/>

  <xs:element name="Cancel_OrderLineReq">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Data">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Delivery" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:int" name="Delivery_No"/>
                    <xs:element type="xs:string" name="Reason"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这两种方法都将允许成功验证SOAP信封及其有效负载。

 类似资料:
  • 问题内容: 我正在尝试获取一个bean对象以使用Spring Security验证用户登录功能: 我applicationContext.xml的如下: 但我得到这个异常: 我很难理解这个问题。 我对XML进行了如下更改: 我现在收到此异常: 问题答案: 你的默认名称空间是,http://www.springframework.org/schema/security并且你配置了它,xmlns:be

  • 问题内容: 我有弹簧罐,并试图 从此处给出的教程中实现程序。xml配置文件为: 主要: 我不知道这些豆怎么了。到目前为止,关于其他问题的任何建议都无济于事。有什么帮助吗? 问题答案: 假设您使用的是Spring 3.1,请尝试以下操作: 在最后一行用您使用的 主要 Spring版本替换。含义:即使有Spring版本,也没有XSD 。

  • 我有这个问题 XML格式的文档 我的XSD 我有个神经衰弱的问题。有什么想法吗? 问候

  • 在spring中,每当我在dispatcher-servlet.xml中编写时,我都会得到这样的错误:-

  • 我从GitHub获取了一个android项目,并将其克隆到了我的android Studio中。当我试图运行ActivityMain时。xml文件为了检查项目是否正常工作,我遇到了这个错误“找不到元素'RelativeLayout'的声明”。我不知道怎么解决这个问题。如果任何人有任何其他方式运行该项目,请建议太多。 github文件的链接如下所示 https://github.com/PedroC

  • 我正在尝试用Spring配置Hazelcast。我正在为Hazelcast的xml文件配置使用单独的文件,我检查了我在该文件中用xml配置的xsd,它包含“Hazelcast”元素,也按照xsd中的名称空间规范进行了配置,还添加了3.3版本的Hazelcast,Hazelcast all 我检查了xsd文件-http://www.hazelcast.com/schema/confighazelca