我正在编写一个程序来获取WSDL和任何导入的文件,然后将它们保存到一个目录中。作为其中一部分,我想做的是展平文件结构,这样只有一个目录包含WSDL引用的所有文件或其引用文件引用的文件。所以我需要进入每个文件,无论哪里有导入,我都需要删除名称之外的路径。这是一个例子:
<xsd:import schemaLocation="xsds/Currency.xsd" namespace="urn:example.com:enterprise:schemas:reference:currency">
</xsd:import>
因此上面的导入引用了文件xsds/Currency.xsd
,我想从中提取Currency.xsd
。我可以使用XPath表达式获取此属性的内容以匹配标记,如下所示:
//*[local-name()='import']/@schemaLocation
但是,可能还有其他类型的标记,其中WSDL或其引用的xsds可能会导入此XPath表达式不匹配的文件。我可能需要匹配的其他标签或字段名称是什么,所以我不会错过任何文件?
答案 0 :(得分:1)
您可能想要使用
//@schemaLocation
可以捕获所有schemaLocation
属性,而与它们出现的位置无关。
schemaLocation
命名空间中包含XSD
属性的元素:
import
include
redefine
您应该知道,在XMLSchema-instance
命名空间中,限定的schemaLocation
属性将包含空格分隔对,其中每个偶数编号的组件都是一个位置(奇数 - 编号的项目是名称空间)。