我想为以下xml生成一个合适的XSD。我试过在线转换,但每个网站都提供不同的输出。你能帮我找一个正确的XSD吗?
<empsts:empTest xmlns:empsts="http://www.empsts.com/schema/empsts"
xmlns:cm="http://www.empsts.com/schema/common"
xmlns:deccm="http://www.empsts.com/schema/deccm"
xmlns:mis="http://www.empsts.com/schema/miscellaneous"
xmlns:emp="http://www.empsts.com/schema/emp"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.empsts.com/schema/empsts ../idec/empsts.xsd"
empsts:docType="DEC" empsts:id="01020150609000133" empsts:msgType="EMPSTS">
<empsts:record>
<emp:payment xsi:type="empsts:empStatusType">
<empsts:reference>
<empsts:acctId>ubce</empsts:acctId>
<empsts:docRefNo>2015021</empsts:docRefNo>
<empsts:regType cm:type="1">10</empsts:regType>
<empsts:empSSN>1296238</empsts:empSSN>
</empsts:reference>
<empsts:statusInfo>
<empsts:statusDate>2023-06-31</empsts:statusDate>
<empsts:statusCode>1</empsts:statusCode>
<empsts:originalMsgId>EMP2015021</empsts:originalMsgId>
</empsts:statusInfo>
<empsts:statusErrorDetails>
<empsts:statusErrorCodeDetails>8</empsts:statusErrorCodeDetails>
<empsts:remarks>Follow</empsts:remarks>
</empsts:statusErrorDetails>
</emp:payment>
</empsts:record>
<empsts:record>
<emp:payment xsi:type="empsts:empStatusType">
<empsts:reference>
<empsts:acctId>ubce</empsts:acctId>
<empsts:docRefNo>2015021</empsts:docRefNo>
<empsts:regType cm:type="1">10</empsts:regType>
<empsts:empSSN>1296238</empsts:empSSN>
</empsts:reference>
<empsts:statusInfo>
<empsts:statusDate>2023-06-31</empsts:statusDate>
<empsts:statusCode>1</empsts:statusCode>
<empsts:originalMsgId>EMP2015021</empsts:originalMsgId>
</empsts:statusInfo>
<empsts:statusErrorDetails>
<empsts:statusErrorCodeDetails>8</empsts:statusErrorCodeDetails>
<empsts:remarks>Follow</empsts:remarks>
</empsts:statusErrorDetails>
</emp:payment>
</empsts:record>
</empsts:empTest>
有人可以帮助我使用正确的XSD架构文件吗?
答案 0 :(得分:0)
通常,无法自动生成架构,因为您无法猜测可选元素。但作为一个起点,你可以尝试这种转变:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsl:for-each select="//*[not(descendant::element())]">
<xsl:element name="xs:element">
<xsl:attribute name="name">
<xsl:value-of select="name()"/>
</xsl:attribute>
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="//*[descendant::element()]">
<xsl:element name="xs:element">
<xsl:attribute name="name">
<xsl:value-of select="name()"/>
</xsl:attribute>
<xs:complexType>
<xs:sequence>
<xsl:for-each select="child::*">
<xsl:element name="xs:element">
<xsl:attribute name="ref">
<xsl:value-of select="name()"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xs:sequence>
</xs:complexType>
</xsl:element>
</xsl:for-each>
</xs:schema>
</xsl:template>
</xsl:stylesheet>
已经回答here。可能需要手动添加名称空间要求。