如何根据 python 中的 xsd 将 xml 文件映射到新的 xml 文件?
How to map a xml file to a new xml file based on a xsd in python?
我有 2 个 xsd 个文件(A.xsd 和 B.xsd)。 A.xsd包含100个元素,B.xsd包含20个元素。 B.xsd中的20个元素也包含在A.xsd.
中
此外,我有一个 xml 文件,其模式对应于 A.xsd。
我想将 xml 中的 100 个元素映射到一个新的 xml 文件,其架构遵循 B.xsd.
python有什么简单的方法可以解决这个问题吗?非常感谢!
A.xsd 例子
<xs:element name="name" type="xs:string"/>
<xs:element name="address1" type="xs:string"/>
<xs:element name="address2" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
B.xsd 例子
<xs:element name="name" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
xml 例子
<name>UNIONTOWN, PA</name>
<address1>testtesttest</address1>
<address2>testtesttest Commons</address2>
<city>Uniontown</city>
第二个 xml 示例(最终需要)
<name>UNIONTOWN, PA</name>
<city>Uniontown</city>
所以您正在进行转换以删除未在 B.xsd 中定义的元素?好吧,如果这两个模式足够简单,您可以执行一个 XSLT 转换,将这两个模式作为输入,构建一个在 A 中声明但不在 B 中声明的元素的列表,并以 XSLT 的形式输出该列表删除相关元素的样式表:
<xsl:template match="address1|address2"/>
加上一个身份模板规则来复制其他不变的东西。
当然,不能保证此转换的输出实际上对 B.xsd 有效 - 这取决于差异的确切性质。
我有 2 个 xsd 个文件(A.xsd 和 B.xsd)。 A.xsd包含100个元素,B.xsd包含20个元素。 B.xsd中的20个元素也包含在A.xsd.
中此外,我有一个 xml 文件,其模式对应于 A.xsd。
我想将 xml 中的 100 个元素映射到一个新的 xml 文件,其架构遵循 B.xsd.
python有什么简单的方法可以解决这个问题吗?非常感谢!
A.xsd 例子
<xs:element name="name" type="xs:string"/>
<xs:element name="address1" type="xs:string"/>
<xs:element name="address2" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
B.xsd 例子
<xs:element name="name" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
xml 例子
<name>UNIONTOWN, PA</name>
<address1>testtesttest</address1>
<address2>testtesttest Commons</address2>
<city>Uniontown</city>
第二个 xml 示例(最终需要)
<name>UNIONTOWN, PA</name>
<city>Uniontown</city>
所以您正在进行转换以删除未在 B.xsd 中定义的元素?好吧,如果这两个模式足够简单,您可以执行一个 XSLT 转换,将这两个模式作为输入,构建一个在 A 中声明但不在 B 中声明的元素的列表,并以 XSLT 的形式输出该列表删除相关元素的样式表:
<xsl:template match="address1|address2"/>
加上一个身份模板规则来复制其他不变的东西。
当然,不能保证此转换的输出实际上对 B.xsd 有效 - 这取决于差异的确切性质。