【问题标题】:How to show name of attribute instead of "item" in XML output如何在 XML 输出中显示属性名称而不是“项目”
【发布时间】:2012-10-18 05:32:41
【问题描述】:

我正在编写一个 WSDL 文件并且它正在工作。但是,输出看起来并不完全是我喜欢看到的。所以,我定义了这样的输出消息:

<message name="serviceResponse">
  <part name="code" type="xsd:string"/>
  <part name="description" type="xsd:string"/>
  <part name="results" element="tns:myProperty"/>
</message>

标签中,我有:

<xsd:element name="myProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="description" type="xsd:string"/>
      <xsd:element name="id" type="xsd:int"/>
      <xsd:element name="date" type="xsd:date"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

作为回应,我得到:

<SOAP-ENV:serviceResponse>
  <code xsi:type="xsd:string">001</code>
  <description xsi:type="xsd:string">Successful</description>
  <results SOAP-ENC:arrayType="SOAP-ENC:Array[2]" xsi:type="SOAP-ENC:Array">
    <item SOAP-ENC:arrayType="xsd:ur-type[7]" xsi:type="SOAP-ENC:Array">
      <item xsi:type="xsd:string">John</item>
      <item xsi:type="xsd:string">Director</item>
      <item xsi:type="xsd:int">21</item>
      <item xsi:type="xsd:string">2012-10-16</item>
    </item>
    <item SOAP-ENC:arrayType="xsd:ur-type[7]" xsi:type="SOAP-ENC:Array">
      <item xsi:type="xsd:string">Smith</item>
      <item xsi:type="xsd:string">Programmer</item>
      <item xsi:type="xsd:int">88</item>
      <item xsi:type="xsd:string">2012-10-18</item>
    </item>
  </results>
</SOAP-ENV:serviceResponse></SOAP-ENV:Body>

我希望在“结果”标签中得到类似以下的内容,而不是一堆“项目”:

<myProperty SOAP-ENC:arrayType="xsd:ur-type[7]" xsi:type="SOAP-ENC:Array">
  <name xsi:type="xsd:string">John</name>
  <description xsi:type="xsd:string">Director</description>
  <id xsi:type="xsd:int">21</id>
  <date xsi:type="xsd:string">2012-10-16</date>
</myProperty>
<myProperty SOAP-ENC:arrayType="xsd:ur-type[7]" xsi:type="SOAP-ENC:Array">
  <name xsi:type="xsd:string">Smith</name>
  <description xsi:type="xsd:string">Programmer</description>
  <id xsi:type="xsd:int">88</id>
  <date xsi:type="xsd:string">2012-10-18</date>
</myProperty>

有人能解释一下吗?谢谢

【问题讨论】:

    标签: xml web-services wsdl


    【解决方案1】:

    我通过查看另一个帖子解决了这个问题:WSDL list of complexType HOWTO- define, return from a service?

    不需要 DTD 定义。无论如何感谢so

    我所做的略有不同。我没有使用名为“myProperty”的元素,而是直接使用名称“myProperty”定义了一个 complexType。它刚刚工作。

    <xsd:complexType name="myProperty">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="description" type="xsd:string"/>
            <xsd:element name="id" type="xsd:int"/>
            <xsd:element name="date" type="xsd:date"/>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:element name="serviceResponse">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element maxOccurs="unbounded" minOccurs="0" name="myResult" nillable="true" type="tns:myProperty"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    

    输出完全符合我的预期:

    <myProperty xsi:type="ns1:myProperty">
        <name xsi:type="xsd:string">Smith</name>
        <description xsi:type="xsd:string">Programmer</description>
        <id xsi:type="xsd:int">88</id>
        <date xsi:type="xsd:date">2012-10-18</date>
    </myProperty>
    

    【讨论】:

    • 有人能解释一下为什么吗?我确实遇到了相反的问题,我已经尝试解决了 3 天。出于绝望,我想我会用“元素”来包装我的 complexType,结果成功了!
    【解决方案2】:

    为您的 myProperty 标记正确定义 DTD。

    类似:

    <!ELEMENT myProperty (name,description,id,date)>
    <!ELEMENT name(#PCDATA)>
    <!ELEMENT description(#PCDATA)>
    <!ELEMENT id(#PCDATA)>
    <!ELEMENT date(#PCDATA)> 
    

    【讨论】:

    • 感谢您的评论。但是我在哪里定义它们?在哪个部分?抱歉,我是网络服务的新手
    • 您必须已定义“结果”标签。在该定义下方,您可以放置​​此代码。内部 Doctype 声明。你可以在“w3schools.com/dtd/dtd_intro.asp”找到更多信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2015-03-31
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多