0

我想从 WSDL 文件中提取内联模式。但是,我不知道如何为此执行 XSL 转换。创建这样一个样式表的任何帮助都会很棒。

多谢,

4

2 回答 2

0

这个对我有用:

<?xml-stylesheet type="text/xsl"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:s="http://www.w3.org/2001/XMLSchema" >

<xsl:output method="xml" />

<xsl:template match='text()' />

<xsl:template match="//s:schema">
    <xsl:copy-of select='.'/>
</xsl:template>    

</xsl:stylesheet>

它假定您的内联模式使用http://www.w3.org/2001/XMLSchema命名空间。

于 2012-07-10T13:04:55.547 回答
0

当 wsdl 包含多个模式元素时,您可以执行以下操作:使用 https://gist.github.com/ebratb/3819949 中的 xsd-split.xslt 将 *.wsdl 文件拆分为多个 *.xsd文件。

您可以使用 maven 插件在 Saxon 上运行 2.0 xslt(参见http://www.mojohaus.org/xml-maven-plugin/examples/transform-saxon.html

然后编写一个小的模式文件,它只导入那些生成的 *.xsd 文件以及肥皂信封的官方定义。

<?xml version="1.0" encoding="UTF-8" ?>  
<xsd:schema attributeFormDefault="unqualified"       elementFormDefault="qualified" targetNamespace="http://your.company.com/dummy" xmlns:xsd="http://www.w3.org/2001/XMLSchema">                      
   <xsd:import namespace="http://<target namespace of the first xsd file>"  schemaLocation="file:///path/to/first.xsd"  />
   <xsd:import namespace="http://<target namespace of the second xsd file>" schemaLocation="file:///path/to/second.xsd"  />
    ...

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

使用自定义资源解析器时,不需要 schemaLocation 属性。

于 2016-07-21T17:28:11.673 回答