我是 XSD 的新手,很难创建 XSD 来验证以下传入的 XML 消息。
我遇到的困难是:
- 数据元素“Field”,其属性“position”值等于“FirstName”或“LastName”必须存在,并且只出现一次。
- 数据元素“Field”,其属性“position”值等于“MiddleName”是可选的。而如果出现,也只能出现一次。
- 日期元素“字段”将只有这三个子元素,如果“中间名”不存在,则只有两个。
有什么想法吗?
传入的原始 XML,需要 XSD 进行验证。
<Message>
<MessageTypeIndicator version="1" class="8" function="2" origin="3"/>
<Fields>
<Field position="FirstName">Jason</Field>
<Field position="LastName">Smith</Field>
<Field position="MiddleName">dk</Field>
</Fields>
</Message>
稍后,我还将创建一个 XSLT 来将原始 XML 转换为以下内容:
<Person>
<MessageTypeIndicator>
<version>1</version>
<class>8</class>
<function>2</function>
<origin>3</origin>
</MessageTypeIndicator>
<FirstName>Jason</FirstName>
<LastName>Smith</LastName>
<MiddleName>dk</MiddleName>
</Person>
以下是我迄今为止创建的未经验证的 xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet>
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Message>
<MessageTypeIndicator>
<version>
<xsl:value-of select="Message/MessageTypeIndicator/@version"/>
</version>
<class>
<xsl:value-of select="Message/MessageTypeIndicator/@class"/>
</class>
<function>
<xsl:value-of select="Message/MessageTypeIndicator/@function"/>
</function>
<origin>
<xsl:value-of select="Message/MessageTypeIndicator/@origin"/>
</origin>
</MessageTypeIndicator>
<xsl:for-each select="Message/Fields/Field">
<xsl:if test="@position='FirstName'">
<FirstName>
<xsl:value-of select="string(.)"/>
</FirstName>
</xsl:if>
<xsl:if test="@position='LastName'">
<LastName>
<xsl:value-of select="string(.)"/>
</LastName>
</xsl:if>
<xsl:if test="@position='MiddleName'">
<MiddleName>
<xsl:value-of select="string(.)"/>
</MiddleName>
</xsl:if>
</xsl:for-each>
</Message>
</xsl:template>
</xsl:stylesheet>