您可以转换无序的 xml 以匹配 xsd:sequence 顺序吗?
您好,我需要使用 xslt 将无序 xml 转换为 xsd 模式中指定的正确顺序,
<Person>
<property name="address" value="5" />
<property name="firstname" value="1234567890" />
<property name="lastname" value="The BFG" />
</Person>
需要使用
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
xml 可以具有任何顺序的属性,其中包含 10 多个属性元素。我尝试使用 xsl: for-each 尝试处理 xml,但我对如何让 xslt 将 xml 转换为序列定义的正确顺序感到困惑,
任何帮助将不胜感激
Hi i need to transform unorderd xml using xslt to the correct order as specified in an xsd schema
<Person>
<property name="address" value="5" />
<property name="firstname" value="1234567890" />
<property name="lastname" value="The BFG" />
</Person>
would need to be transformed using
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
The xml could have the properties in any order, with upwars of 10+ property elements.I have tried using an xsl:for-each to try and process the xml but i'm stumped at how to get the xslt to transform the xml into the correct order as defined by the sequence
any help would be appreciated
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这可能不是最好的方法,但似乎效果不错。我不确定 xs:element 的处理顺序是否得到保证。另外,这是在 oXygen 中使用 Saxon-HE 9.3.0.5 测试的 XSLT 2.0 答案。
XML 输入(修改了
Person
的大小写以匹配架构):外部 XSD 架构文件 (schema.xsd):
XSLT 2.0 样式表:
XML 输出:
希望这会有所帮助。
This may not be the best way, but it seems to work ok. I'm not sure if the order that the
xs:element
's are processed is guaranteed though. Also, this is an XSLT 2.0 answer tested with Saxon-HE 9.3.0.5 in oXygen.XML Input (modified the case of
Person
to match the schema):External XSD Schema file (schema.xsd):
XSLT 2.0 Stylesheet:
XML Output:
Hope this helps.
这是一个 XSLT 1.0 解决方案:
当此转换应用于提供的 XML 文档时(
Person
重命名为person
匹配架构):如果提供的 XML 架构位于文件
c:\temp\delete\schema.xsd
:则需要正确的结果产生:
Here is an XSLT 1.0 solution:
when this transformation is applied on the provided XML document (
Person
renamed toperson
to match the schema):and if the provided XML schema is in the file
c:\temp\delete\schema.xsd
:then the wanted, correct result is produced: